FoodTracker iOS教程:heightAnchor和widthAnchor仅在水平堆栈视图的子视图和垂直堆栈视图的情况下才适用于UIButton

时间:2019-07-22 21:00:48

标签: swift nslayoutconstraint nsstackview

https://developer.apple.com/library/archive/referencelibrary/GettingStarted/DevelopiOSAppsSwift/ImplementingACustomControl.html

在上述Apple所提供的FoodTracker教程标准中(特别是在实现自定义控件部分中),它告诉您使用以下代码实现的约束仅在您正在创建的UIButton视图位于您要创建的UIStackView View Controller中时才有效,并且前提是该UIStackView是本教程前面创建的另一个UIStackView的子视图(包含您在本教程中创建的其余视图)。

我设法将按钮调整为正确的大小(我犯了一个错误,那就是将水平UIStackView置于其超级视图之外),但是我不知道为什么除非水平堆叠视图是正确的,否则按钮将无法正确调整大小垂直stackview的子视图。有人可以解释为什么吗?

致谢。

class RatingControl: UIStackView {

    //MARK: Initialization
    override init(frame: CGRect) {
        super.init(frame: frame)
        setupButtons()
    }
    required init(coder: NSCoder) {
        super.init(coder: coder)
        setupButtons()
    }


    //MARK: Private methods
    private func setupButtons() {
        // Create the button
        let button = UIButton()
        button.backgroundColor = UIColor.red

        // Add constraints
        button.translatesAutoresizingMaskIntoConstraints = false
        button.heightAnchor.constraint(equalToConstant: 44.0).isActive = true
        button.widthAnchor.constraint(equalToConstant: 44.0).isActive = true
        print(button.intrinsicContentSize)

        // Add the button to the stack
        addArrangedSubview(button)
    }
}

0 个答案:

没有答案