Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 目标-C–;cellForRowAtIndexPath导致按钮框更改大小?_Objective C_Ios_Cocoa Touch_Uitableview - Fatal编程技术网

Objective c 目标-C–;cellForRowAtIndexPath导致按钮框更改大小?

Objective c 目标-C–;cellForRowAtIndexPath导致按钮框更改大小?,objective-c,ios,cocoa-touch,uitableview,Objective C,Ios,Cocoa Touch,Uitableview,我在这里有点绊倒了。第一次加载时,ui按钮可以很好地定位自身。但是每次对-tableView:cellforrowatinexpath:的后续调用似乎都会操纵ui按钮的框架,使其变小。它似乎添加到frame.origin.x,似乎从frame.size.width中减去。ui按钮首先在-viewDidLoad中设置,如下所示: self.facebookButton = [UIButton buttonWithType:UIButtonTypeCustom]; [self.facebookBut

我在这里有点绊倒了。第一次加载时,
ui按钮
可以很好地定位自身。但是每次对
-tableView:cellforrowatinexpath:
的后续调用似乎都会操纵
ui按钮的框架,使其变小。它似乎添加到
frame.origin.x
,似乎从
frame.size.width
中减去。ui按钮首先在
-viewDidLoad
中设置,如下所示:

self.facebookButton = [UIButton buttonWithType:UIButtonTypeCustom];
[self.facebookButton setFrame:CGRectMake(0, 0, 159, 29)];
[self.facebookButton setBackgroundImage:[UIImage imageNamed:@"LoginWithFacebookNormal.png"] forState:UIControlStateNormal];
[self.facebookButton setBackgroundImage:[UIImage imageNamed:@"LoginWithFacebookPressed.png"] forState:UIControlStateHighlighted];
[self.facebookButton addTarget:self action:@selector(loginToFacebook) forControlEvents:UIControlEventTouchUpInside];
我的cellForRowAtIndexPath如下所示(我不会重用单元格,因为我只显示一个单元格):

我看到几个问题:

  • 您将按钮的中心设置为单元格的中心,这是完全错误的。单元的中心位于其superview的坐标系中,但按钮的中心位于contentView的坐标系中。您可能应该使用类似于
    cell.center=CGPointMake(CGRectMidX(cell.contentView.bounds)、CGRectMidY(cell.contentView.bounds))
    ,即使这样,根据按钮和contentView的大小,分数原点也会出现问题

  • 您试图在此方法中部分设置按钮,但未完全设置。你应该在这里重新设置它的框架

  • 您已设置自动调整大小掩码,以便根据contentView的移动方式实际缩小(或增大)按钮。这意味着,例如,如果表格进入编辑模式并出现“删除”按钮,则按钮将缩小。这还意味着,如果您有一个分组表,则按钮将在
    -cellforrowatinexpath:
    和表的实际显示之间收缩(因为单元格本身会收缩以适应分组表中的填充)`


  • 谢谢凯文的回答。简单地说,如果我想把UIVIEW放在它的超级视图的中间而不使用常量。我会怎么做?我发现我分组的<代码> UITababVIEW Cys< /Cord>的内容视图框架是<代码>(9, 0)302×46 < /代码>所以现在在UBiButt的中心,我只写了<代码>[self.facebookButton setCenter:CGPointMake(151,23)];
    但谁知道,有一天苹果可能会更改contentView的宽度,然后我的代码就会中断。@彼得瓦波:在运行时计算一个居中的矩形。这并不难。
    frame.origin.x=roundf((superview.bounds.size.width-frame.size.width)/2.0f)
    。您可能不希望您的按钮具有灵活的宽度/高度,因为这可能会导致按钮收缩,而不仅仅是移动以保持居中。
    UITableViewCell *cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault 
                                                                   reuseIdentifier:nil];
    
    // Set the background view of the cell to be transparent        
    UIView *backView = [[UIView alloc] initWithFrame:CGRectZero];
    backView.backgroundColor = [UIColor clearColor];
    cell.backgroundView = backView;
    
    [self.facebookButton setCenter:cell.center];
    
    // Magic code that puts the button IN the center of the cell
    self.facebookButton.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin;
    
    [cell.contentView addSubview:self.facebookButton];
    
    cell.selectionStyle = UITableViewCellSelectionStyleNone;
    
    return cell;