在 Xcode 中自动调整标签行的大小有意外的结果
Posted
技术标签:
【中文标题】在 Xcode 中自动调整标签行的大小有意外的结果【英文标题】:Autoresizing row of labels in Xcode has unexpected results 【发布时间】:2018-03-24 21:39:37 【问题描述】:我在为一行标签的布局使用自动调整大小时遇到问题。
见下图。
我希望第一个标签占据整个宽度。 名为“Lat:”的标签将是与左侧对齐的窄恒定宽度。
名为“Lon:”的标签将是在中心水平对齐的窄恒定宽度。
标签“55.000”和“-95.000”将具有可变宽度,基本上填充显示边缘和其他标签(“Lat:”和“Lon:”)之间的空间。
我以为我正确使用了自动调整大小约束,但是当显示器倾斜到横向时,自动调整大小有意想不到的结果标签彼此重叠。
任何帮助将不胜感激。
在 Xcode 9.2 中使用通用 ios 应用
【问题讨论】:
张贴您的限制的图片。为什么你使用 4 个标签而不是 2 个?为什么不将标签文本设置为包含“Lat:”?你知道stackView是什么吗? 约束截图如上面的截图所示。窄标签仍然是“Lat:”和“Lon:”。在应用程序中计算 55.0000 和 -95.0000。是的,我知道堆栈视图,但我希望“Lat:”和“Lon:”标签变窄,而另外两个标签的宽度会根据所使用的显示器及其方向而改变 该图像没有给出分配给约束或优先级的值。 我没有使用约束,而是使用自动调整大小的约束。 【参考方案1】:我认为使用自动调整大小是不可能的,因为在定位时只有两个选项,要么将视图固定在固定位置,要么按比例移动它。无法将其固定到中心位置,因此随着尺寸的变化,您的第三个视图将无法正确定位。此外,具有灵活宽度的两个视图将与父视图的宽度成正比,而您确实希望它们的大小与父视图的宽度/2 相同,因此您无法使它们的大小完美.
要解决它,您需要使用带约束的自动布局或通过layoutSubviews()
中的代码进行布局。这两种方法实际上都很容易解决您的问题。
更新:
我通过动态更改视图大小对其进行了测试。这就是它的样子。第一个图像是开始条件,视图宽度为300
。第二张图片是当宽度更改为600
时。底部的值首先是视图宽度,然后是四个“段”x 位置和宽度中的每一个。
【讨论】:
实际上,水平放置在中间的标签(深绿色的)效果很好,并且水平放置在显示的中心。其他两个标签(浅绿色和浅黄色)似乎无法通过与中间和最左侧标签以及显示器边缘保持固定距离来调整自身大小。 我做了一个测试,我动态地改变了视图宽度,虽然它看起来像第三个项目粘在中心,但它没有。我将使用此屏幕截图更新我的解决方案。以上是关于在 Xcode 中自动调整标签行的大小有意外的结果的主要内容,如果未能解决你的问题,请参考以下文章
在自动调整大小的标签中的不同行上显示 Swift 字符串数组