iOS:当其accessoryView更改时,如何触发tableViewCell的约束/自动布局的刷新?

标签 ios uitableview autolayout uilabel constraints

我有一个自定义 tableview + 自定义单元格,它们是使用基于约束的自动布局构建的(全部以编程方式,无 IB)。在每个单元格中(除其他外)有一个(可能)带有文本的多行标签。自动布局的第一次计算很好 - 即 UILabel 根据其文本长度正确换行。

但是一旦我选择一个单元格(即从 UITableViewCellAccessoryNone 更改为 UITableViewCellAccessoryCheckmark)并且 UILabel.text 所需的行数应该更改 - 但保持不变。

我试过了...

[myTableView reloadData];

[myTableView beginUpdate];
[myTableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationNone];
[myTableView endUpdates];

...在单元格选择委托(delegate)中,但没有成功更新单元格布局。

我想我需要告诉系统重新评估 tableviewcell 的约束(特别是重新评估 UILabel 的 preferredMaxLayoutWidth。)但我不知道如何以正确的方式做到这一点。 (我用 setNeedsUpdate 尝试了一些东西,而不是试错式。)

预先感谢您为我指明了正确的方向!

最佳答案

您必须通过以下方式专门重新评估 UILabel 的 preferredMaxLayoutWidth:-

- (void)viewDidLayoutSubviews
{
    [super viewDidLayoutSubviews];
    [self updatePreferredMaxLayoutWidth:self.lblText]; // you have to store a UIlabel temporarily on didselectaction of UITableView
    [self.view layoutSubviews];
}

关于iOS:当其accessoryView更改时,如何触发tableViewCell的约束/自动布局的刷新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29969135/

相关文章:

ios - 使用自动布局设置动态 UIView 以匹配容器 View

ios - 如何将 XCode 5 自动布局用于容器 View ?

ios - 在 iOS 的 xmppframework 中使用 XMPPAutoTime 的正确方法是什么

ios - 将自动布局(约束)从 xib/storyboard 转换为代码?

iphone - MonoTouch 应用内广告?

objective-c - 在 ViewController 中的两个 View 上以编程方式设置自动布局约束

ios - 在 Tableview 单元格内的 webview 上加载 HTML 内容需要太多时间?

ios - 在 Swift 中使用 ClassName.Type 进行初始化

ios - UIFlowLayoutSection.updateEstimatedSizeForSection 中的 EXC_ARITHMETIC

验证期间发现的 iOS 问题 - 无效字符