gpt4 book ai didi

iOS Autolayout 视觉格式 - 如何设置间距以尝试一个值但在小屏幕上回退到另一个值?

转载 作者:行者123 更新时间:2023-12-01 18:44:22 25 4
gpt4 key购买 nike

我正在创建一个自定义模态视图,其中包含一堆 UILabel、UIImages 等,并将显示为模态视图。 View 必须使用自动布局,并且必须以编程方式完成,而不是使用 Storyboard/xibs(不幸的是)。

模态视图随着内容的增长而增长,直到它从屏幕的边缘(顶部、底部、左侧、右侧)到达 8 个点。

subview 之间的很多边距是 16 和 24 点。在较新的 iPhone 和纵向模式下,这一切都很棒,并且在屏幕和模态视图之间留下了足够的空间。
但是当旋转到横向时,模态视图从顶部/底部边缘达到 8 pt 限制,并且许多 subview 完全缩小。

解决此问题的方法是将 subview 之间的所有“边距”更改为 8 点。这让一切都有足够的空间展示。

我的目标是能够动态调整边距,以便它们将“尝试”较高的值(即 16、24),但如果 View 已经填满屏幕,则会“回落”到较小的值(即 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))

但是,即使 View 有足够的空间增加高度,这也总是会回落到 '8@900' 值。

我也试过这个,这似乎适用于一些 subview ,但不是全部:
NSLayoutConstraint.activateConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:|-(>=8,<=24)-[titleLabel]-[detailsLabel]-(>=8,<=24)-[button(40)]-(>=8,<=24)-|", options: [.AlignAllCenterX], metrics: metrics, views: views))

最佳答案

它不会回退到 8,8 是比 24 更高的优先级约束,所以如果可能的话它会这样做。在 Auto Layout 1000 被认为是必需的(即,如果有两个互斥的 1000 优先级约束,您会在日志中看到一堆错误)。相反,优先级 0 - 999 都被认为是可选的。系统可以破坏任何可选的内容以满足所需的约束,并且您基本上选择一个介于 0 和 999 之间的值来指定您希望它们被破坏的顺序(0 是首先破坏的顺序,999 是最后破坏的顺序) .还值得注意的是,各种系统事件发生在 various priorities。 .

我会考虑通过将较小的边距设为所需优先级(1000)的不等式并将较大的边距设为优先级 999 的等式来解决您的问题。这样,它将尝试使用 24 点值,但如果在保持其他所需的约束,它将使其小至 8 个点。

值得注意的是,这两个差距可能不会以相同的速度缩小。要做到这一点,您可能需要做一些棘手的事情,例如使用直接固定到 super View 的隐藏 View (隐藏 View 仍然会影响布局)和所需高度 >=8 以及高度为 24@999 的标签.然后你可以使这两个隐藏 View 也被限制为彼此相等。如果您能够支持 iOS 9.x+,您可以使用 UILayoutGuide反而。

NSLayoutConstraint.constraintsWithVisualFormat("V:|-(>=8,24@999)-[titleLabel]-[detailsLabel]-(>=8,24@999)-[button(40)]-(>=8, 24@999)-|", options: [.AlignAllCenterX], metrics: metrics, views: views)

关于iOS Autolayout 视觉格式 - 如何设置间距以尝试一个值但在小屏幕上回退到另一个值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37713958/

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