自动布局中的 UIButton 动态宽度

Posted

技术标签:

【中文标题】自动布局中的 UIButton 动态宽度【英文标题】:UIButton dynamic width in autolayout 【发布时间】:2015-11-06 13:47:17 【问题描述】:

大家好,我有一个。 当我删除或隐藏一个按钮时,我在控制器中有两个按钮,我希望其他按钮根据宽度增加尺寸。 这里我使用的是自动布局,所以请相应地发布您的答案

当我隐藏按钮其他按钮时,请参见上图,它应该根据大小进行调整。

【问题讨论】:

哪个版本的ios?你可以使用堆栈视图吗? 如果这是 iOS 9,为什么不使用堆栈视图? 我对stackview了解不多。 所以这是一个绝佳的学习机会。您只需将堆栈视图和太阳视图添加到它。当您删除子视图时,它会为您重新组织其他子视图 【参考方案1】:
    设置创建布局所需的所有约束,就像在您的第一个屏幕截图中一样 在 IB 中选择“时间按钮”和“现金支付”按钮并添加约束以对齐它们的后沿 选择这个新的“trailing-edges-constraint”并将其优先级设置为高 (750) (对“立即付款”按钮重复步骤 1-3,但这次对齐前缘)

就是这样!

【讨论】:

不,这不起作用,但我使用了以下链接,它对我有一点帮助,但没有解决问题。 ***.com/questions/16009405/… 看看我的示例项目,看看它是否有效:dropbox.com/sh/8i28u5ncnx6y1ws/AADlWbQEvLdFTg0AraZcMwwea?dl=0 这是有效的,但我不使用stackview,因为它只适用于ios 9。【参考方案2】:

FDStackView

使用 UIStackView 就好像它支持 iOS 6。它会在 iOS 9 之前的运行时自动将 UIStackView 的符号替换为 FDStackView。

或者您可以使用 UIView 数组来保存您想要的按钮。数组的第一个和最后一个元素是一个 1px 宽度 0.01 alpha UIView。使第一个左对齐屏幕左侧,最后一个右对齐屏幕右侧。

您需要做的就是将按钮放入数组中,并确保每个按钮都在 1px 视图之间。

【讨论】:

【参考方案3】:

您可以通过创建其“宽度约束”出口手动添加此约束,如下所示:

无论你想在哪里重新设置它的宽度,你都可以手动设置,

   - (IBAction)buttonClicked:(id)sender 

    [UIView animateWithDuration:0.15 animations:^
        _widthConstraint.constant = 100;
    ];
    [self.view layoutIfNeeded];
    [self.view updateConstraints];

【讨论】:

以上是关于自动布局中的 UIButton 动态宽度的主要内容,如果未能解决你的问题,请参考以下文章

UIScrollView 动态内容中的自动布局,底部有 UIButton

如何使用自动布局防止 UIButton 超出其父 UIView 的宽度

stackView swift中uibutton问题的自动布局/宽度

调整 UIButton 宽度/高度 (iOS) - 如何在不禁用自动布局的情况下解决?

swift 设置UIbutton图片文字位置布局

在所有屏幕的自动布局上以固定宽度居中 UIButton