许多SO问题显示了一种自动布局技术,用于确定视图所需的最小大小,以满足其约束条件: [header systemLayoutSizeFittingSize: UILayoutFittingCompressedSize]
在systemLayoutSizeFittingSize:打电话之前,我见过的所有例子都强制进行布局更新,如下所示:
[view setNeedsLayout];
[view layoutIfNeeded];
CGFloat height = [view systemLayoutSizeFittingSize: UILayoutFittingCompressedSize].height;
Run Code Online (Sandbox Code Playgroud)
我想知道什么时候这实际上是必要的,因为它看起来像是一种仪式调料:我想知道为什么我打电话,而不是为了运气!
我刚刚systemLayoutSizeFittingSize:在一些代码中使用了我有选择地更新一个UITableView实例的视图tableViewHeader(不是节头),然后调整它的大小.没有额外的电话,它似乎工作正常.我有这个viewDidLoad:
{
// Remove the view that we don't want.
[self.autoPopulateView removeFromSuperview];
// Resize the table's header view now the unwanted view is removed.
UIView *const header = self.tableView.tableHeaderView;
// Don't explicitly layout.
// [header setNeedsLayout];
// [header layoutIfNeeded];
CGFloat height = [header systemLayoutSizeFittingSize: UILayoutFittingCompressedSize].height;
CGRect frame = header.frame;
frame.size.height = height;
header.frame = frame;
}
Run Code Online (Sandbox Code Playgroud)
谢谢.
在调用 systemLayoutSizeFittingSize 之前绝对不需要进行其中任何一个调用。只要所有限制都已到位,您就不需要执行任何其他操作。
事实上,从性能的角度来看,预先强制进行布局传递可能是有害的,而且我认为这样做不仅是不必要的,而且实际上是有害的。
| 归档时间: |
|
| 查看次数: |
672 次 |
| 最近记录: |