Обновление ограничений ячеек Subview
У меня есть пользовательская ячейка, и я пытаюсь обновить ограничения подпредставления, как показано ниже:
CustomeCell.m
-(void)layoutSubviews
{
[super layoutSubviews];
_con_view_width.constant = _lbl_property.frame.size.width;
if(!_btn_imageCount.isHidden)
_con_view_width.constant = _lbl_property.frame.size.width + _btn_imageCount.frame.size.width;
NSLog(@"%@",NSStringFromCGRect(_view_lbl_btn.frame));
[_view_lbl_btn updateConstraintsIfNeeded];
NSLog(@"%@",NSStringFromCGRect(_view_lbl_btn.frame));
}
Проблема Ограничения работают только после перезагрузки строк при прокрутке
2 ответа
Вместо updateConstraintsIfNeeded попробуйте layoutIfNeeded. Я думаю, что это будет работать, и ваш код должен выглядеть следующим образом.
-(void)layoutSubviews
{
[super layoutSubviews];
_con_view_width.constant = _lbl_property.frame.size.width;
if(!_btn_imageCount.isHidden)
_con_view_width.constant = _lbl_property.frame.size.width + _btn_imageCount.frame.size.width;
NSLog(@"%@",NSStringFromCGRect(_view_lbl_btn.frame));
[_view_lbl_btn layoutIfNeeded];
NSLog(@"%@",NSStringFromCGRect(_view_lbl_btn.frame));
}
РЕДАКТИРОВАТЬ: Если вы делаете это внутри пользовательского класса ячеек, то вам нужно добавить еще одну строку в ячейку для строки в пути индекса.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath];
//[cell layoutIfNeeded];
[cell layoutSubviews];
return cell;
}
Попробуйте обновить ограничения в методе, который используется для возврата ячейки к табличному виду при делегировании источника данных вместо метода layoutSubviews в ячейке.
И позвонить cell.contentView.layoutIfNeeded()
перед обновлением ограничений, которые установят ячейку по умолчанию для ширины и высоты (320, 44, в зависимости от устройства), в случае, если вы можете получить ширину. После ячейки делегация вернулась к столу. Размер ячейки будет обновляться в соответствии с табличным представлением (структура делает это для вас), если вы установите некоторые ограничения, которые либо напрямую, либо относительно меняют размер.