繁体   English   中英

使用UIStackView将单个视图居中

[英]Using UIStackView to center single view

我一直在尝试使用UIStackView在IB中设置一个简单的容器视图。 我希望这个容器以其唯一排列的子视图为中心,并尊重子视图的内在内容大小。

不幸的是,对于所有可能的对齐和分布配置,子视图被拉伸以沿轴填充宽度。

这看起来像一个奇怪的边缘情况或错误,因为一旦我添加第二个视图,一切都按预期行事,并且两个子视图保持其内部内容大小方法定义的大小。

我很想知道为什么UIStackView表现得那样。

UIStackView创建优先级为1000(允许的最大优先级)的约束,即UILayoutPriorityRequired 如果可能,需要自动布局以满足这些约束。

您在“高”优先级的约束( UILayoutPriorityDefaultHigh == 750 ,我推测)与堆栈视图的必需约束冲突,因此自动布局将忽略您的约束。

如果将约束优先级设置为1000,则自动布局将无法满足所有必需的约束。 它将记录一个错误,它将破坏其中一个约束。 你无法选择它破坏的约束。

请注意,它只需要破坏三个约束中的一个来解决系统,并且它可以破坏三个冲突约束中的任何一个。 但是,打破三个冲突约束中的任何一个都不会使系统以您的视图为中心。 您的视图应该最终拉伸,或者拥抱堆栈视图的一端,具体取决于自动布局中断的约束。 iOS的未来版本可能会更改自动布局,以便破坏不同的约束并更改布局。

目前尚不清楚为什么要尝试使用堆栈视图来集中视图。 如果您只有一个视图并且想要UIStackView ,请将其父视图设为普通UIView而不是UIStackView ,并设置约束以使视图在父视图中居中。

如果您正在使用堆栈视图,因为有时您需要在堆栈中放置多个已安排的子视图,那么除了内容视图之外,还应添加两个隐藏的间隔视图(轴的每一端)。 在间隔物之间​​创建等宽或等高约束。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM