当我们从视图中删除第三个按钮时,我们如何增加两个按钮的宽度

How we can increase width of two button when we remove third button from view

提问人:Manjeet Singh 提问时间:12/20/2016 最后编辑:Bhavin RamaniManjeet Singh 更新时间:12/21/2016 访问量:391

问:

我有三个大小相等的按钮的视图。每个按钮占视图的 1/3 部分。

像这张图片:

enter image description here

如果我删除/隐藏一个按钮,那么两个按钮的宽度应该相等增加并占据 1/2 的视图部分。如果我删除两个按钮,那么一个按钮大小应该等于视图大小。

我的问题是,如何使用自动布局。

iPhone iOS-AutoLayout

评论

2赞 Bhavin Bhadani 12/20/2016
自动布局的可能重复 如何在具有 3 个等宽视图的视图中隐藏 1 个视图
0赞 Rikh 12/20/2016
您想完全删除按钮还是只是隐藏和取消隐藏它?
0赞 EmilioPelaez 12/21/2016
我不认为这个问题应该作为重复的问题关闭,因为与链接的问题不同,这个问题没有指定它必须与 AutoLayout 一起使用,并且在另一个问题的答案中没有提到。UIStackView

答:

6赞 Sivajee Battina 12/20/2016 #1

最好的选择是使用 stackView。StackView 在添加或删除项目方面提供了很大的灵活性。如果您只想使用自动布局,您可以通过将其宽度约束连接为 IBOutlet 并以编程方式更改值来实现。

评论

0赞 Manjeet Singh 12/21/2016
是的,StackView 提供了更灵活、更易于创建的功能。但是我们如何仅使用常量来执行。请提供任何建议、教程或链接。
0赞 Akhil V Nair 12/20/2016 #2

最好的方法是使用 UISTACKVIEW。放置一个堆栈视图并添加 3 个按钮。您可以根据需要为堆栈视图提供适当的布局约束

单击堆栈视图 -- 选择属性检查器 改变分布--平均填充 间距--0

然后,如果您隐藏任何按钮,其他按钮将自动调整宽度

0赞 TheCodeTalker 12/20/2016 #3

此问题的其他可能解决方案是:在运行时添加或删除约束是一项重量级操作,可能会影响性能。但是,有一个更简单的选择。

对于要隐藏的视图,请设置宽度约束。使用与该视图的前导水平间隙约束其他视图。

若要隐藏,请将宽度约束的 .constant 更新为 0.f。其他视图将自动向左移动以占据位置。对于相等的宽度,pervoid 乘以宽度。.

0赞 Gianluca Tranchedone 12/21/2016 #4

您有以下几种选择:

  1. UIStackView正是为此而制作的。
  2. UICollectionView在某种程度上类似于,但并不是真正为此而来的。但是,它可以很好地完成工作并且易于实施。有时比 .UIStackViewUIStackView
  3. NSLayoutConstraint通过使用具有不同优先级的多个约束,以便您可以根据需要激活/停用它们并获得所需的结果。这种方法稍微复杂一些,因为它为您提供了对层次结构中视图的最高程度的控制和灵活性。
0赞 EmilioPelaez 12/21/2016 #5

实现您正在寻找的目标的最佳方法是,就像其他人已经提到的那样,使用 .UIStackView

当堆栈视图内部的属性设置为 true 时,该堆栈视图将隐藏视图并处理布局,因此您只需要为堆栈视图设置正确的约束。isHiddenUIView