当我在我的一个 View 上调用 sizeToFit
时,我注意到 iOS 框架首先调用 sizeThatFits
,然后在该 View 上调用 layoutSubviews
。这对我来说是有问题的,因为我的 sizeThatFits
中的计算取决于我的 layoutSubviews
的结果。在下面的示例中, subview 在 layoutSubviews
中得到调整,并且此 subview 的高度在 sizeThatFits
中使用。目前我的代码无法正常工作,顺序已颠倒。
在我的 View Controller 的 viewDidLoad 中:
UIView* header = [[MyHeader alloc] init];
[header sizeToFit];
self.tableView.tableHeaderView = header;
[header release];
在我看来:
- (void) layoutSubviews {
[super layoutSubviews];
[self.subView sizeToFit];
}
- (CGSize) sizeThatFits:(CGSize)size {
return CGSizeMake(
self.frame.size.width,
self.subView.frame.size.height
);
}
最佳答案
您会希望您的 View 始终做正确的事 (tm),无论您以何种顺序调用事物。为此,我建议将计算 View 和 subview 所需高度的代码放在一个单独的方法中。沿着这些线的东西:
- (void)updateSubviewDimensions
{
[self.subview sizeToFit];
// possibly much more code
}
- (void) layoutSubviews {
[super layoutSubviews];
[self updateSubviewDimensions];
}
- (CGSize) sizeThatFits:(CGSize)size {
[self updateSubviewDimensions];
return CGSizeMake(
self.frame.size.width,
self.subView.frame.size.height
);
}
这样,您就不需要记住在调用 sizeToFit
之前调用某个方法,但您的 View 将始终按您的意愿行事。此外,当您在几个月后查看(或让不同的开发人员查看)时,您的代码不那么脆弱且更容易理解。
关于iphone - 如何让 layoutSubviews 在 sizeThatFits 之前被调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12148421/