【问题标题】:Button exceeds the parent view despite contraints尽管有约束,按钮仍超出父视图
【发布时间】:2019-05-19 07:02:21
【问题描述】:

我有一个项目,其中两个水平堆栈视图被打包在一个(主)垂直堆栈视图中。每个水平堆栈视图都包含一个按钮和一个开关。

我设置了主 StackView 的前导和尾随约束。问题是当按钮的标题太长时,开关会超出屏幕限制。

这是它在 Interface Builder 中的样子:

下面是它在模拟器中的样子:

按钮和开关之间没有约束,因为每次我将这些元素打包到水平堆栈视图中时,所有约束都会丢失。

我通过指定 Constrain to margins 创建了约束:

我试图找到解决方案here,但没有找到。

我很迷茫,我做错了什么?尽管有限制,为什么开关会超出屏幕?我是否错过了一些关于什么是约束的信息?

【问题讨论】:

  • Dog Button and Dog Switch/Cat Button and Cat Switch的content hugging property是什么?
  • 我也试过和他们一起玩但没有成功。目前有未触及的,250 用于拥抱优先,750 用于抗压

标签: ios autolayout constraints interface-builder xcode10


【解决方案1】:

首先,您的按钮看起来需要是标签。按钮不喜欢有多行内容。如果您出于某种原因需要可点击标签,您可以这样做。

其次,需要将标签(或按钮)的横向内容抗压优先级降低到749,使其低于开关(默认为750)。这样一来,他们两个就不会为了位置而互相争斗:switch 会赢,而且即使文本变大,标签也会让自己让步。

话虽如此,我认为您可能会更喜欢使用不同的底层接口。堆栈视图,特别是作为嵌入垂直堆栈视图中的类似行的堆栈视图,似乎不太适合您正在做的事情。这是相同的排序,而是作为表格视图完成:

我认为这是实现目标的更好方法。表格视图不必看起来像表格视图;在上面的屏幕截图中,表格视图无法滚动,无法选择其单元格,并且没有单元格分隔符。但是由标签和开关组成的单元格的重复比你正在做的更容易和灵活地实现;将我正在做的事情扩展到更多问题并切换是微不足道的,而您正在做的事情不会容易或令人愉快地扩大规模。

【讨论】:

  • 我将堆栈视图更改为带有标签的表格视图。无论标签文本是什么,现在都会保留对齐方式。谢谢!!
猜你喜欢
  • 1970-01-01
  • 2015-08-05
  • 1970-01-01
  • 2014-07-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-19
相关资源
最近更新 更多