在堆栈视图中创建UILabel互相拥抱

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在堆栈视图中创建UILabel互相拥抱相关的知识,希望对你有一定的参考价值。

我正在我的应用程序中制作促销页面,以使用户想要购买应用程序的PRO版本。

我正在使用堆栈视图进行布局,我正在努力使项目间隔得很好,这是我已经实现的。唯一的问题是,我想要它,以便该功能的标题与UILabel容器的底部对齐,并且该功能的描述与UILabel容器的顶部对齐。

目前看起来的片段:

enter image description here

每个函数及其标题都在具有相等间距的堆栈视图中。正如你所看到的,每个UILabel的帧是相等的,我目前无法看到停止文本始终垂直居中。

谁能告诉我如何让每个功能和功能描述更多地相互拥抱?

(例如,在这张照片中,无广告会更低,而且没有更多的广告会更高,今天的小部件会更低,轻松启动计时器会更高。)

答案

您没有发布任何代码,但UIStackViewDistribution可能是您的问题所在。在所有情况下,视图都填充堆栈。如果您希望项目更靠近,则调整堆栈大小以适合其内容。

这是一些显示对齐和分布的示例代码:

@IBOutlet weak var stack: UIStackView!
override func viewDidLoad() {
    super.viewDidLoad()

    stack.axis = .vertical
    stack.distribution = .equalSpacing
    stack.alignment = .fill
    stack.spacing = 0

    let rndColors = [ UIColor.red, UIColor.blue, UIColor.yellow, UIColor.brown, UIColor.orange, UIColor.green ]

    for i in 1...24 {
        let one = UILabel()
        one.backgroundColor = rndColors[i % rndColors.count]
        let desiredSize = CGSize(width: stack.frame.width, height: stack.frame.height)
        let point = CGPoint(x: 0, y: 0)
        let desiredRect = CGRect(origin: point, size: desiredSize)
        one.frame = desiredRect
        let text = "No Ads (i)"
        let myAttribute = [ NSAttributedStringKey.font: UIFont(name: "Chalkduster", size: (CGFloat(i + 10)))! ]
        one.attributedText = NSAttributedString(string: text, attributes: myAttribute)

        stack.addArrangedSubview(one)
    } 
}

最终结果如下:

stack

如果更改spacingalignmentdistribution的值,则可能会影响它们堆叠的紧密程度。

以上是关于在堆栈视图中创建UILabel互相拥抱的主要内容,如果未能解决你的问题,请参考以下文章

单行 UILabel 拥抱不适用于自动收缩

堆栈视图和内容拥抱优先级 - 意外行为

UITableViewCell 上的背景视图在使用切片 xcasset 时拥抱内容

Xcode 期望堆栈视图中的 UILabel 具有比它更大的高度

在垂直堆栈视图中设置图像子视图的高度

在后台堆栈中保持片段视图运行