2016-02-03 3 views
0

У меня есть обычай UITableViewCell. В UITableViewCell's contentView я добавил UIButton и ниже кнопки есть UILabel (Button и UILabel являются братьями и сестрами друг к другу).Настройка высоты UITableViewCell в соответствии с меткой изменения размера

В начале не будет текста на UILabel, поэтому его ограничение по высоте установлено на> = 0. но Когда я нажимаю кнопку, я устанавливаю свойство текста UILabel, и оно должно стать видимым. Другими словами, я хочу расширить высоту UILabel, а также увеличить высоту UITableViewCell.

Я возлагал UIButtonTop,Leading и Trailing края к UITableViewCellcontentView и точно так же я возлагал UILabel в Bottom,Leading и Trailing края к UITableViewCell contentsView.

Теперь проблема в том, что когда я нажимаю UITableViewCell, он не изменяет размер UILabel, а также не регулирует UITableViewCell.

Вот мой код

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 


    MYCustomCell *cell = (MYCustomCell *) [tableView cellForRowAtIndexPath:indexPath]; 
    cell.descriptionLbl.text = @"This is my text"; 
    [cell layoutSubviews]; 
} 

Аналогично

- (void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath { 

    MYCustomCell *cell = (MYCustomCell *) [tableView cellForRowAtIndexPath:indexPath]; 
    cell.descriptionLbl.text = @""; 
    [cell layoutSubviews]; 
} 

Вот это layoutSubViews моего пользовательского Cell

- (void) layoutSubviews { 
    [super layoutSubviews]; 

    self.descriptionLbl.preferredMaxLayoutWidth = CGRectGetWidth(self.contentView.bounds); 
    self.descriptionLbl.numberOfLines = 0; 
    [self.descriptionLbl sizeToFit]; 
    if (self.descriptionLbl.text.length > 0){ 
    self.descriptionLbl.frame = CGRectMake(self.descriptionLbl.frame.origin.x, self.descriptionLbl.frame.origin.y, self.descriptionLbl.frame.size.width, 50); // Here the size will be calculated more accurately later 
    } 
} 

Просто обратите внимание, что я не заходящего высоту от UITableViewCell в любом месте.

ответ

2

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

https://github.com/rushisangani/TableViewCellExpand

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

+0

Привет, Кажется, это работает. Спасибо, но я хочу понять, как вы используете приоритет ограничения высоты, чтобы показать и скрыть его. Вы можете мне это объяснить? – Madu

+0

Да, в основном вам нужно установить приоритет низкого для просмотра, который вы хотите свернуть. а также подпункты этой точки зрения. – iOSEnthusiatic

+0

Не могли бы вы рассказать мне какую-нибудь документацию, где упоминалось, что или есть какой-то другой трюк, с которым вы столкнулись. Я все еще не могу понять, как приоритет используется для его краха. – Madu

0

В конечном итоге вы должны сделать это вашей -viewdidLoad

[_tableview setRowHeight:UITableViewAutomaticDimension]; 
[_tableview setEstimatedRowHeight:44]; 

UITableViewAutomaticDimension говорит ваш рост клеток является динамичным и setEstimatedRowHeight пусть ваша высота прокрутки рассчитывается

+0

спасибо, но это не работает меня. – Madu

+0

Верхний край верхнего окна (кнопки) должен быть выровнен с нижним полем topmargin и bottom view (label) верхнего уровня contentView, которое должно быть выровнено с нижним полем contentView. Убедитесь, что это – Rajesh

+0

Не имеет значения? Я имею в виду, что у меня уже есть моя Button.top = contentView.top и аналогично label.bottom = contentView.bottom – Madu

0

При настройке динамически размерных представлений в ячейках таблицы, очень важно, чтобы вы установили все ограничения правильно. Большинство распространенных ошибок разработчиков - это опустить нижнее вертикальное ограничение на ячейку.

Чтобы получить более подробное объяснение того, как настроить динамически измененные размеры UILabels в пользовательских UITableViewCells, просмотрите сообщение, которое я написал правильно here.

0

Swift 2.0:

Добавить это:

override func viewDidLoad() { 
    super.viewDidLoad()  
    self.tableView.estimatedRowHeight = 80 
    self.tableView.rowHeight = UITableViewAutomaticDimension 
    } 

или

func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat { 

     self.tableView.estimatedRowHeight = 80 
     self.tableView.rowHeight = UITableViewAutomaticDimension 
} 

В случае таблицы View Controller, используйте:

func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat { 
self.tableView.setNeedsLayout() 
self.tableView.layoutIfNeeded() 
} 
Смежные вопросы