gpt4 book ai didi

iphone - 如何让 layoutSubviews 在 sizeThatFits 之前被调用?

转载 作者:可可西里 更新时间:2023-11-01 03:08:37 24 4
gpt4 key购买 nike

当我在我的一个 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com