我正在创建一个自定义模态视图,其中包含一堆 UILabel、UIImages 等,并将显示为模态视图。视图必须使用自动布局,并且必须以编程方式完成,而不是使用故事板/xibs(不幸的是)。
模态视图随着内容的增长而增长,直到它从屏幕的边缘(顶部、底部、左侧、右侧)到达 8 个点。
子视图之间的很多边距是 16 和 24 点。在较新的 iPhone 和纵向模式下,这一切都很棒,并且在屏幕和模态视图之间留下了足够的空间。但是当旋转到横向时,模态视图从顶部/底部边缘达到 8 pt 限制,并且许多子视图完全缩小。
解决此问题的方法是将子视图之间的所有“边距”更改为 8 点。这让一切都有足够的空间展示。
我的目标是能够动态调整边距,以便它们将“尝试”较高的值(即 16、24),但如果视图已经填满屏幕,则会“回退”到较小的值(即 8)。
我知道一种方法是使用多个约束,并在方向改变时切换它们,但如果可能的话,我不想走那条路,因为随着时间的推移,在进行更改时管理可能会很痛苦。
我确实发现了一个花絮,说你可以使用优先级值做这样的事情:
NSLayoutConstraint.activateConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:|-(24@200,8@900)-[titleLabel]-[detailsLabel]-(24@200,8@900)-[button(40)]-(24@200,8@900)-|", options: [.AlignAllCenterX], metrics: metrics, views: views))
但是,即使视图有足够的空间增加高度,这也总是会回落到 '8@900' 值。
我也试过这个,这似乎适用于一些子视图,但不是全部:
NSLayoutConstraint.activateConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:|-(>=8,<=24)-[titleLabel]-[detailsLabel]-(>=8,<=24)-[button(40)]-(>=8,<=24)-|", options: [.AlignAllCenterX], metrics: metrics, views: views))