1

我想要一个以超级视图为中心的视图,但由于本例中的内容标签而增长。但我不希望它变得不再适合屏幕,所以这就是我固定左右的原因。

我已经戴上了一个测试视图控制器:

import UIKit
import PureLayout

final class ViewController: UIViewController {

    let container: UIView = {
        let container = UIView(forAutoLayout: ())
        container.backgroundColor = UIColor.blackColor()
        container.clipsToBounds = true
        return container
    }()

    let label: UILabel = {
        let label = UILabel(forAutoLayout: ())
        label.textAlignment = NSTextAlignment.Center
        label.numberOfLines = 1
        label.textColor = UIColor.redColor()
        label.text = "This is a very very very long message"
        return label
    }()

    var rightView: UIView = {
        let view = UIView(forAutoLayout: ())
        view.backgroundColor = .redColor()

        return view
    }()

    override func viewDidLoad() {
        super.viewDidLoad()

        self.container.addSubview(self.label)
        self.view.addSubview(self.container)
        self.view.addSubview(self.rightView)

        self.container.autoPinEdgeToSuperviewEdge(.Bottom, withInset: 20)
        self.container.autoAlignAxisToSuperviewAxis(.Vertical)
        self.container.autoSetDimension(.Height, toSize: 36)
        self.container.layer.cornerRadius = 18
        self.container.autoPinEdge(.Right, toEdge: .Left, ofView: self.rightView, withOffset: -20, relation: .LessThanOrEqual)
        self.container.autoPinEdgeToSuperviewEdge(.Left, withInset: 20, relation: .GreaterThanOrEqual)
        self.container.setContentCompressionResistancePriority(UILayoutPriorityRequired, forAxis: .Horizontal)

        self.label.autoPinEdgesToSuperviewEdgesWithInsets(UIEdgeInsetsMake(10, 20, 10, 20))

        self.rightView.autoPinEdgeToSuperviewEdge(.Right, withInset: 5)
        self.rightView.autoPinEdgeToSuperviewEdge(.Bottom, withInset: 20)
        self.rightView.autoSetDimension(.Width, toSize: 50)
        self.rightView.autoSetDimension(.Height, toSize: 60)
    }
}

结果是:

在此处输入图像描述

为什么黑色视图没有增长,直到它不能由于左右约束?行数为 1 且 ContentCompressionResistancePriority 开启?

4

5 回答 5

2

您可以更改字体大小以适合 UILabel 的宽度(非多行):

label.numberOfLines = 1; label.adjustsFontSizeToFitWidth = true; label.sizeToFit(); 您需要高度的动态变化意味着您可以执行以下操作

动态 UILabel 更改

label.preferredMaxLayoutWidth = 500;

您可以使用上面的代码来设置首选的最大宽度,一切顺利:)

于 2016-09-07T12:19:34.007 回答
1

标签上的前导和尾随约束是什么,您可以将前导约束设置为大于或等于 5 之类的不等式。如果您对字体变小感到满意,则可以设置adjustsFontSizeToFitWidth为“是”。

于 2016-09-07T12:01:29.200 回答
0

在您的代码中设置,label.numberOfLines = 0然后只有它会根据您拥有的文本进行扩展。

于 2016-09-07T11:56:28.090 回答
0

我正在使用 xcode 4。我已经测试过这个问题

Xcode 截图

在此处输入图像描述

在 iPhone 6 上运行后

在此处输入图像描述 由于您在标签之外还有一个视图,因此它不会删除或将视图移动到另一层,以便标签使用代码自动调整大小

[labelName sizeToFit];
于 2016-09-07T13:17:03.097 回答
0

尝试这个

testLabel.text = "long text......."
testLabel.numberOfLines = 0
testLabel.sizeToFit()
于 2016-09-07T11:53:04.227 回答