【发布时间】:2014-06-21 06:32:33
【问题描述】:
在我的视图控制器的 .xib 文件中,我使用了 UITableView,它具有动态的行数。因为它不是 .xib 文件中的唯一元素(它的上下还有其他元素),所以我需要在知道行数后更改它的高度约束。
为了实现这一点,我使用了this solution,它工作得很好。
因此:
@implementation MyViewController
{
__weak IBOutlet UITableView *_tableView;
__weak IBOutlet NSLayoutConstraint *_tableViewHeightConstraint;
}
- (void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
[self adjustHeightOfTableview];
}
- (void)adjustHeightOfTableview
{
CGFloat height = _tableView.contentSize.height;
_tableViewHeightConstraint.constant = height;
[self.view needsUpdateConstraints];
}
现在这工作正常,但问题是当显示 ViewController 时您可以看到高度发生变化(因为在 viewDidAppearof 当然这样做)。
我想避免这种情况并且当 ViewController 被显示时,它应该直接显示所需的高度。
我试过在viewDidLayoutSubviews 中调用adjustHeightOfTableview 而不是viewDidAppear,正如建议的here 那样,但这给了我这个错误:
*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Auto Layout still required after sending -viewDidLayoutSubviews to the view controller. MyViewController's implementation needs to send -layoutSubviews to the view to invoke auto layout.'
我注意到,如果我在 adjustHeightOfTableview 方法的末尾调用 [self.view layoutSubviews];,那么我不会收到任何错误,但我的表格视图根本不可见。使用viewDidAppear 中的调试器检查_tableView.contentSize.height,表明它具有正确的值。 (根据我的行数)
在我的adjustHeightOfTableview 方法结束时调用[self.view layoutIfNeeded]; 或[self.view setNeedsLayout]; 与调用[self.view layoutSubviews]; 具有相同的行为:没有错误,但我的表格视图不可见。
以防万一,我使用的是自定义UITableViewCell。
有人知道我做错了什么吗?
【问题讨论】:
标签: objective-c uitableview ios7 constraints autolayout