如果设置隐藏,iOS UIStackView 无法同时满足约束

Posted

技术标签:

【中文标题】如果设置隐藏,iOS UIStackView 无法同时满足约束【英文标题】:iOS UIStackView unable to simultaneously satisfy constraints if set hidden 【发布时间】:2016-02-08 09:17:23 【问题描述】:

我在引用 UIStackView 时遇到问题。我创建了一个 StackView 并向其中添加了一些捆绑到另一个 StackViews 中的项目。现在我想使用 hidden 属性为内部 StackViews 设置动画以在不同对象之间切换。为此,我在ViewDidLoad 的代码中调用StackView.hidden 来隐藏包含项目的StackView。这些代码似乎在模拟器中工作,但它会引发错误:

Unable to simultaneously satisfy constraints.
    Probably at least one of the constraints in the following list is one you don't want. 
    Try this: 
        (1) look at each constraint and try to figure out which you don't expect; 
        (2) find the code that added the unwanted constraint or constraints and fix it. 
(
    "<NSLayoutConstraint:0x7fd29d00b460 'UISV-canvas-connection' UIStackView:0x7fd29acdb3b0.top == UIStackView:0x7fd29acdc120.top>",
    "<NSLayoutConstraint:0x7fd29d00b5a0 'UISV-canvas-connection' V:[UISlider:0x7fd29accb620]-(0)-|   (Names: '|':UIStackView:0x7fd29acdb3b0 )>",
    "<NSLayoutConstraint:0x7fd29d00f8d0 'UISV-hiding' V:[UIStackView:0x7fd29acdb3b0(0)]>",
    "<NSLayoutConstraint:0x7fd29d00b9a0 'UISV-spacing' V:[UIStackView:0x7fd29acdc120]-(10)-[UISlider:0x7fd29accb620]>"
)

Will attempt to recover by breaking constraint 
<NSLayoutConstraint:0x7fd29d00b9a0 'UISV-spacing' V:[UIStackView:0x7fd29acdc120]-(10)-[UISlider:0x7fd29accb620]>

我发现内部 StackView 中的问题是间距。如果我将间距切换为 0,问题就会消失。但我不想错过间距。我认为另一种选择是将每个对象隐藏在内部 StackView 中,但这是一项巨大的工作,而且隐藏 StackView 更简单。有没有办法解决这个问题?

感谢您的帮助!

【问题讨论】:

【参考方案1】:

仅供参考:当我想隐藏 UIStackView 时,我遇到了这种情况。我建议将您希望隐藏的 UIStackView 放在另一个 UIStackView 分配设置为填充而不是按比例填充

【讨论】:

以上是关于如果设置隐藏,iOS UIStackView 无法同时满足约束的主要内容,如果未能解决你的问题,请参考以下文章

iOS:隐藏 UIStackView 子视图

UIStackView 图层属性

UIStackView 显示/隐藏动画无法正常工作

UIStackView“无法同时满足约束”“压扁”隐藏视图

UIStackView 隐藏视图和旋转时无法满足的布局

在 iOS 9 上更改隐藏属性时 UIStackView 不会动画