uiview - systemLayoutSizeFittingSize : require setNeedsLayout & layoutIfNeeded before it?

标签 uiview autolayout

一些 S.O.问题展示了一种自动布局技术,用于确定 View 满足其约束所需的最小尺寸:[header systemLayoutSizeFittingSize: UILayoutFittingCompressedSize]
制作前systemLayoutSizeFittingSize:调用,我见过的所有示例都强制进行布局更新,如下所示:

[view setNeedsLayout];
[view layoutIfNeeded];
CGFloat height = [view systemLayoutSizeFittingSize: UILayoutFittingCompressedSize].height;

我想知道这实际上何时是必要的,因为它似乎是作为一种仪式调味料撒在其中的:我想了解为什么我要打电话,而不是为了运气!

我刚用过 systemLayoutSizeFittingSize:在某些代码中,我有选择地更新 View 是 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;
}

谢谢。

最佳答案

在调用 systemLayoutSizeFittingSize 之前,绝对不需要进行这些调用。只要您的所有约束都到位,您就不需要做任何其他事情。

事实上,从性能的角度来看,预先强制布局可能是有害的,我认为这样做不仅没有必要,而且实际上是有害的。

关于uiview - systemLayoutSizeFittingSize : require setNeedsLayout & layoutIfNeeded before it?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28091760/

相关文章:

ios - 以编程方式实现的约束与 Storyboard 中的约束的工作方式不同

swift - 折叠 Tableview 部分时出现约束错误

iOS 将图像传递给另一个类的 IBOutlet

ios - 如何在图片上写文字并保存

ios - 在 iOS 运行时更改 subview

ios - 编程约束在 UICollectionViewCell Swift 中不起作用

swift - 许多子类的一个 XIB View

iphone - 用于 UIImageView/UIView 时如何调整使用 resizableImageWithCapInsets 创建的 UIImage 的大小

ios - 根据 ImageView 大小更改 View 位置

ios - 如何触发对所有自动布局约束的更新?