2010-12-08 2 views
4

Есть ли способ использовать авторезистирующие маски для перемещения моего контента, чтобы кнопка удаления не закрывала его? Googling сказал мне, что мне нужно установить авторезистирующую маску UIViewAutoresizingFlexibleRightMargin на моем subview. Мне кажется, что UIViewAutoresizingFlexibleWidth на самом деле имеет больше смысла; хотя я пробовал их обоих, и ни один из них не работает.Изменение размера содержимого UITableViewCell при появлении кнопки удаления

Представление, которое я пытаюсь сжать, - это всего лишь метка, которая является подвидью contentView ячейки. Я не уверен, что сам ContentView автоматически изменится, когда появится кнопка удаления; но похоже, что это не так; в противном случае моя авторезистирующая маска должна работать.

Если наличие кнопки удаления не приводит к изменению размеров просмотров; В любом случае, я могу сделать это вручную?

ответ

4

Вы должны использовать UIViewAutoresizingFlexibleLeftMargin.

Вот почему. Вы хотите, чтобы ваше содержимое перемещалось влево, в основном, похоже, что кнопка удаления нажимает содержимое слева, из-за его пути. flexibleLeftMargin в основном означает, что ваш UILabel останется фиксированным в правой части вашего contentView. Причина, по которой вы этого хотите, заключается в том, что кнопка удаления фактически приводит к тому, что ваш ContentView уменьшает ее ширину.

Маска autoresizing вашего UILabel относится к тому, как она ведет себя внутри contentView, а не в ячейке.

Дайте ему попробовать, он должен работать.

+0

UIViewAutoresizingFlexibleLeftMargin не работает для меня, но UIViewAutoresizingFlexibleWidth делает. – derpoliuk 2013-04-04 15:13:29

3

Этот вопрос действительно старый, но я чувствую, что должен отвечать на все так же, как только я нашел решение самостоятельно.

Отображается только содержимое контента CellView с кнопкой подтверждения. Если вы не добавите свои представления (метки, образы изображений и т. Д.) В cell.contentView вместо их непосредственного добавления в ячейку, они не будут изменены при изменении размера содержимого. В моем случае я добавлял его непосредственно в ячейку.

Таким образом, вместо того, чтобы делать что-то вроде:

UILabel *nameLabel = [[UILabel alloc] initWithFrame:CGRectMake(5, 5, width-10, 20)]; 
[nameLabel setFont:[UIFont boldSystemFontOfSize:16]]; 
[nameLabel setHighlightedTextColor:[UIColor whiteColor]]; 
[nameLabel setAutoresizingMask:UIViewAutoresizingFlexibleWidth]; 
[nameLabel setTag:101]; 
[cell addSubview:nameLabel]; 
[nameLabel release]; 

вы должны сделать:

UILabel *nameLabel = [[UILabel alloc] initWithFrame:CGRectMake(5, 5, width-10, 20)]; 
[nameLabel setFont:[UIFont boldSystemFontOfSize:16]]; 
[nameLabel setHighlightedTextColor:[UIColor whiteColor]]; 
[nameLabel setAutoresizingMask:UIViewAutoresizingFlexibleWidth]; 
[nameLabel setTag:101]; 
[[cell contentView] addSubview:nameLabel]; // <<--- note the change in this line! 
[nameLabel release]; 

Надеется, что это помогает другим, кто наткнуться на этом вопрос.

1

Я использую iOS 7, у меня такая же проблема. Я использую отдельный xib для UITableViewCell с включенным автоматическим макетом, поэтому просто добавил еще одно ограничение на ярлык, чтобы он имел фиксированный зазор на его правой стороне.

Смежные вопросы