标签的自动布局水平对齐,除非另一个项目侵占
Posted
技术标签:
【中文标题】标签的自动布局水平对齐,除非另一个项目侵占【英文标题】:Autolayout horizontal alignment for label unless another item encroaches 【发布时间】:2017-07-18 09:57:23 【问题描述】:我有一个自定义导航栏(控制器顶部的简单 UIView),它有两个对象,一个描述屏幕的标签和一个右侧的按钮。
我希望尽可能使标签水平(居中)对齐。当屏幕尺寸太小(例如 4 英寸 iPhone)时,我希望标签向左移动以允许两个项目完全显示并且不截断文本。
如果空间允许,它应该是这样的:
设备小,不理想:
我也希望它在小型设备上看起来如何:
有谁知道这是否可以通过 AutoLayout 实现?
【问题讨论】:
导航栏难道不是为你做的吗?标题移动为栏按钮项目腾出空间? 使用自定义导航栏,即 UIView。 好的,我认为你有充分的理由这样做:) 【参考方案1】:用自动布局试试这个:
同时给出你的头衔:Content Compression Resistance priority
和 1000
。
您的左侧标题应具有Center Horizontally constraint
,优先级为<1000
。 (给它750
)。
在它们和其他约束之间也给它们Horizontal spacing constraint
。
【讨论】:
水平间距约束应该 >= 您的最小间距而不是固定值 我以为我试过了,但我想没有。奇迹般有效。谢谢!【参考方案2】:您还可以创建可选约束。所有约束的优先级都在 1 到 1000 之间。需要优先级为 1000 的约束。所有其他约束都是可选的。
您可以创建一个优先级为 1000 的约束和一个优先级为 750 的约束。
在计算解决方案时,自动布局会尝试按照优先级从高到低的顺序满足所有约束。如果它不能满足可选约束,则跳过该约束并继续下一个约束。
即使不能满足可选约束,它仍然可以影响布局。如果跳过约束后布局中有任何歧义,系统会选择最接近约束的解决方案。通过这种方式,未满足的可选约束充当将视图拉向它们的力量。
在此处查看苹果文档Constraint Priorities。
【讨论】:
以上是关于标签的自动布局水平对齐,除非另一个项目侵占的主要内容,如果未能解决你的问题,请参考以下文章