代码之家  ›  专栏  ›  技术社区  ›  Jordan Soltman

无法添加填充的约束

  •  0
  • Jordan Soltman  · 技术社区  · 7 年前

    我正在开发一个自定义控件,它最终将成为一个按钮。我已经成功地在界面生成器中构建了设计,但当我试图以编程方式构建相同的视图时,它并没有按预期工作。我试图通过在将标签连接到其超视图的约束上设置常量来强制进行一些填充,但是,这并没有按预期工作。

    enter image description here

    class RoundedButton3: UIView {
    
    var stringLabel: UILabel
    var numberLabel: UILabel
    var leftBackground: UIView
    var rightBackground: UIView
    var stackView: UIStackView
    
    override init(frame: CGRect) {
        stringLabel = UILabel()
        numberLabel = UILabel()
        leftBackground = UIView()
        rightBackground = UIView()
        stackView = UIStackView()
        super.init(frame: frame)
    
        self.contentMode = .scaleToFill
        self.autoresizingMask = [.flexibleBottomMargin, .flexibleTopMargin, .flexibleLeftMargin, .flexibleRightMargin]
    
        self.translatesAutoresizingMaskIntoConstraints = false
    
        stringLabel.translatesAutoresizingMaskIntoConstraints = false
        numberLabel.translatesAutoresizingMaskIntoConstraints = false
        leftBackground.translatesAutoresizingMaskIntoConstraints = false
        rightBackground.translatesAutoresizingMaskIntoConstraints = false
        stackView.translatesAutoresizingMaskIntoConstraints = false
    
    
        self.addSubview(stackView)
        leftBackground.addSubview(stringLabel)
        rightBackground.addSubview(numberLabel)
        stackView.addArrangedSubview(leftBackground)
        stackView.addArrangedSubview(rightBackground)
    
        stackView.axis = .horizontal
        stackView.alignment = .fill
        stackView.distribution = .fill
    
        stringLabel.setContentHuggingPriority(UILayoutPriorityRequired, for: .horizontal)
        stringLabel.setContentHuggingPriority(UILayoutPriorityRequired, for: .vertical)
        stringLabel.setContentCompressionResistancePriority(UILayoutPriorityRequired, for: .horizontal)
        stringLabel.setContentCompressionResistancePriority(UILayoutPriorityRequired, for: .vertical)
        numberLabel.setContentHuggingPriority(UILayoutPriorityRequired, for: .horizontal)
        numberLabel.setContentHuggingPriority(UILayoutPriorityRequired, for: .vertical)
        numberLabel.setContentCompressionResistancePriority(UILayoutPriorityRequired, for: .horizontal)
        numberLabel.setContentCompressionResistancePriority(UILayoutPriorityRequired, for: .vertical)
    
        self.topAnchor.constraint(equalTo: stackView.topAnchor).isActive = true
        self.bottomAnchor.constraint(equalTo: stackView.bottomAnchor).isActive = true
        self.rightAnchor.constraint(equalTo: stackView.rightAnchor).isActive = true
        self.leftAnchor.constraint(equalTo: stackView.leftAnchor).isActive = true
    
        leftBackground.leftAnchor.constraint(equalTo: stringLabel.leftAnchor, constant: 4).isActive = true
        leftBackground.rightAnchor.constraint(equalTo: stringLabel.rightAnchor, constant: 4).isActive = true
        leftBackground.topAnchor.constraint(equalTo: stringLabel.topAnchor, constant: 4).isActive = true
        leftBackground.bottomAnchor.constraint(equalTo: stringLabel.bottomAnchor, constant: 4).isActive = true
    
        rightBackground.leftAnchor.constraint(equalTo: numberLabel.leftAnchor, constant: 4).isActive = true
        rightBackground.rightAnchor.constraint(equalTo: numberLabel.rightAnchor, constant: 4).isActive = true
        rightBackground.topAnchor.constraint(equalTo: numberLabel.topAnchor, constant: 4).isActive = true
        rightBackground.bottomAnchor.constraint(equalTo: numberLabel.bottomAnchor, constant: 4).isActive = true
    
        stringLabel.text = "RESERVE"
        numberLabel.text = "10"
    
        stringLabel.textColor = AppColors.WSF_GREEN
        numberLabel.textColor = UIColor.white
        rightBackground.backgroundColor = AppColors.WSF_GREEN
        leftBackground.backgroundColor = UIColor.white
        self.layer.borderColor = AppColors.WSF_GREEN.cgColor
        self.layer.borderWidth = 3
        self.layer.cornerRadius = 4
        self.layer.masksToBounds = true
    }
    
    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    
    }
    
    1 回复  |  直到 7 年前
        1
  •  0
  •   yageek    7 年前

    layoutMargins 包含视图的属性。您可以参考以下答案: Adding padding to an UIView .