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;