Swift Stackview在隐藏按钮的情况下意外运行

Swift Stackview在隐藏按钮的情况下意外运行,swift,xcode,autolayout,Swift,Xcode,Autolayout,我正在使用xcode 7.3.1界面生成器,并在stackview中将uilabel和uibutton放在彼此相邻的位置 UIabel左,UIButton右 一旦我将它们嵌入stackview中,uilabel将展开以填充整个stackview,而按钮根本不可见 UILabel将展开以填充整个堆栈视图 作为故障排除的一部分,我试图通过添加宽度约束使UILabel变窄,添加后,我收到一个错误,即宽度与UILable.leading align to:Superview和UILable.tra

我正在使用xcode 7.3.1界面生成器,并在stackview中将uilabel和uibutton放在彼此相邻的位置

UIabel左,UIButton右

一旦我将它们嵌入stackview中,uilabel将展开以填充整个stackview,而按钮根本不可见

UILabel将展开以填充整个堆栈视图

作为故障排除的一部分,我试图通过添加宽度约束使UILabel变窄,添加后,我收到一个错误,即宽度与UILable.leading align to:Superview和UILable.trailing align to:Superview冲突。我没有设置这两个约束,也没有在其他StackView中遇到此问题

试试这个:

  • 删除所有约束
  • 将堆栈放置在需要的位置
  • 使用水平和垂直对齐(使用当前画布值)
  • 应用宽度和高度约束

要获得与第一张图像相似的视图,请执行以下操作

首先删除您拥有的视图(稍后再添加)

现在添加堆栈视图并添加约束以在屏幕上进行布局。顶部、底部、前导、尾随

现在设置这些属性

  • 轴:水平
  • 间距:16
  • 对齐:填充
  • 分配:填充
  • 版面边距:自定义(顶部:16,底部:16,左侧:16,右侧:16)
现在添加标签和按钮。设置标签文本和按钮文本

现在向按钮添加一个宽度约束(只有宽度,没有其他),使其保持所需的宽度

这应该可以解决问题。如果没有,那是因为我仍然不知道你到底想要达到什么样的布局

玩弄数字,试着把它弄对。只是不要添加任何附加约束。你不需要


如果你添加一个屏幕截图,显示你希望你的视图看起来像什么(包括超级视图等),它将更容易提供帮助。您当前隐藏了大量信息,因此很难提供帮助。

我找到了此问题的最终原因

问题是“查看信息”按钮设置为“隐藏”。这是因为除非满足特定情况,否则按钮不会出现。由于按钮设置为“隐藏”,堆栈视图会自动调整约束,使其不显示

解决方法是取消选中“隐藏”,按照我想要的方式安排所有内容,然后重新选中按钮的“隐藏”


虽然我能够创建新的标签和按钮并将它们放入堆栈视图中,但当我将按钮标记为“隐藏”时,它们很快就遇到了相同的问题,因此下面的答案确实帮助我找到了原因。

您只需执行对齐=填充和分布以按比例填充即可。

堆栈视图就是这样工作的。查找教程。“关于雷·温德里奇的报道非常精彩。@Fogmeister谢谢你的反馈。也许我的问题不清楚。在单项目堆栈视图中,或者如果项目是堆栈视图中一行中的唯一内容,我希望它的前缘和后缘与视图对齐。但是,在本例中,视图中有两个项目,其中一个项目被设置为与视图的前导和尾随对齐,超出了第二个项目。如果您有屏幕截图或代码向我们显示,会更加清晰。但是,如果您在堆栈视图中添加或查看约束,那么您基本上误解了堆栈视图的用途。您将堆栈视图的属性设置为什么?再次显示屏幕截图。@Fogmeister在子视图上没有任何约束一旦我将UILabel和UIButton嵌入堆栈视图,UILabel将展开以填充堆栈视图,UIButton的宽度将变为0。添加了stackview属性和标识面板的屏幕截图。对于堆栈视图,您不应添加任何约束。这就是使用堆栈视图的意义所在。@Fogmeister事实并非总是如此。您可能希望手动将某些内容放置在内部。@courtsimas否,实际上不是。如果您希望以不同的方式放置它,则可以嵌套堆栈视图,或者不使用堆栈视图。当您添加手动约束时,它与堆栈视图添加的约束冲突,并可能导致问题。这适用于全新的标签和按钮,但如果我尝试使用现有的标签和按钮(即使没有约束),它也会出现与前面所述相同的问题。我的目标是让标签和按钮在堆栈视图中水平排列。我更喜欢使用现有的对象,因为有很多代码已经绑定到它们。我将使用整个视图进行更新。@CSjunkie你所说的“与它们相关的大量代码”是什么意思?这些都是观点。它们是长方形。界面生成器中没有代码。我将使用视图的其余部分进行更新,有一些按钮与web服务交互,这些按钮可以更改它们的文本和可见性。我可以将此功能重新定向到新按钮上,但我不想这样做。@CSjunkie这实际上是一个简单的按ctrl键拖动来实现的例子。不管怎样。无论需要多长时间,工作的方式都比不工作的方式好得多。:-)听起来你的情况和这个问题不一样。如果你发布了一个问题,请链接到这里,我会看看我是否能帮上忙。