【问题标题】:iOS vertical center dynamic height stack layout in autolayout自动布局中的iOS垂直中心动态高度堆栈布局
【发布时间】:2019-04-29 10:24:01
【问题描述】:

我正在尝试创建具有动态高度内容的垂直和水平居中的堆栈视图。像这样的:

我和我都快到了,但问题是当我添加一个高度应该是动态的按钮(带标签缩放)时,我得到了这个:(注意重叠的按钮)。

这是我目前拥有的:

没有带有长标签的按钮,视图看起来不错。现在我已经阅读了有关自动布局如何工作的概念,它需要知道内容的高度才能使其居中。但是对于内容高度未知的情况呢?

【问题讨论】:

  • 您是否尝试向具有动态高度的按钮添加垂直约束 >= 某个最小值?
  • 是的,我试过了,没用。
  • 看起来您的“复选框”按钮对象缺少一个或两个约束 - 可能您正在使用容器视图,并且它的高度没有被多行标签扩展。您能否显示 Checkbox 对象的代码和/或 IB 布局?
  • 你的意思是 .storyboard XML 文件吗?
  • @antanas_sepikas - 您的 Checkbox 对象是如何设置的?它是带有按钮和标签作为子视图的视图吗?还是标签设置为多行的标准UIButton

标签: xcode autolayout uistackview


【解决方案1】:

UIButtontitleLabel 设置为多行(将换行符更改为自动换行)不会更改按钮的intrinsicContentSize,因此您必须自己操作。

这是一种方法。子类UIButton 像这样:

class CheckboxButton: UIButton {

    override var intrinsicContentSize: CGSize {
        return titleLabel?.intrinsicContentSize ?? CGSize.zero
    }

    override func layoutSubviews() {
        super.layoutSubviews()
        titleLabel?.preferredMaxLayoutWidth = titleLabel?.frame.size.width ?? 0
        super.layoutSubviews()
    }

}

您可以通过为您的按钮提供背景颜色(在开发过程中)以清楚地查看其边界/框架,从而确认尺寸调整是否正确。

之后,间距应该通过自动布局正确处理。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-07-03
    • 1970-01-01
    • 1970-01-01
    • 2014-01-03
    • 2013-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多