Objective-C - cellForRowAtIndexPath заставляет кадр кнопки изменять размер? - PullRequest
0 голосов
/ 11 марта 2012

Я немного споткнулся здесь.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;

1 Ответ

1 голос
/ 11 марта 2012

Я вижу несколько вопросов:

  1. Вы устанавливаете центр кнопки в центр ячейки, что совершенно неверно. Центр ячейки находится в системе координат ее суперпредставления, но центр вашей кнопки находится в системе координат ContentView. Вам, вероятно, следует использовать что-то вроде cell.center = CGPointMake(CGRectMidX(cell.contentView.bounds), CGRectMidY(cell.contentView.bounds)), и даже там у вас будут проблемы с дробным происхождением в зависимости от размера кнопки и contentView.

  2. Вы пытаетесь настроить кнопку частично в этом методе, но не полностью. Вы должны переустановить его кадр здесь

  3. У вас есть маска авторазмера, настроенная на фактическое уменьшение (или увеличение) кнопки в зависимости от того, как перемещается contentView. Это означает, что если, например, таблица переходит в режим редактирования и появляется кнопка удаления, ваша кнопка будет уменьшаться. Это также означает, что если у вас есть сгруппированная таблица, кнопка будет уменьшаться между -cellForRowAtIndexPath: и фактическим отображением таблицы (поскольку сама ячейка сжимается для размещения отступов в сгруппированных таблицах`

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...