Я немного споткнулся здесь.UIButton
прекрасно позиционирует себя при первой загрузке.Но каждый последующий вызов -tableView:cellForRowAtIndexPath:
, кажется, манипулирует кадром UIButton
, делая его меньше.Кажется, он добавляет к frame.origin.x
и, кажется, вычитает frame.size.width
.UIButton сначала настраивается в -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 выглядит следующим образом (я не использую ячейки повторно, поскольку отображаю только одну ячейку):
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;