Ios IBDesignable按钮对齐不起作用?

Ios IBDesignable按钮对齐不起作用?,ios,swift,uibutton,Ios,Swift,Uibutton,我正在对UIButton进行子类化,试图通过编程方式将它们对齐,但它不起作用。 同样的,我可以在stoaryboard中对齐它们。为什么它不起作用 请参见下面的我的代码: @IBDesignable class AddProfilePictureView: UIButton { open var bottomLineLayer : CALayer? @IBInspectable var textColor:UIColor = .gray{

我正在对UIButton进行子类化,试图通过编程方式将它们对齐,但它不起作用。 同样的,我可以在stoaryboard中对齐它们。为什么它不起作用

请参见下面的我的代码:

  @IBDesignable
class AddProfilePictureView: UIButton {
    
    open var bottomLineLayer : CALayer?
    
    @IBInspectable var textColor:UIColor = .gray{
        didSet{ self.titleLabel?.textColor = textColor }
    }

    @IBInspectable var leftHandImage: UIImage? {
        didSet {
            leftHandImage = leftHandImage?.withRenderingMode(.alwaysOriginal)
            setupImages()
        }
    }
    @IBInspectable var rightHandImage: UIImage? {
        didSet {
            rightHandImage = rightHandImage?.withRenderingMode(.alwaysOriginal)
            setupImages()
        }
    }
    @IBInspectable var bottomLineColor: UIColor = UIColor.lightGray {
        didSet {
            addBottomLine()
        }
    }
    
    @IBInspectable var imageSize: CGFloat = 20{
        didSet {
            setupImages()
        }
    }
    @IBInspectable var titlePadding: CGFloat = 25{
        didSet {
            alignment()
        }
    }
    override init(frame: CGRect) {
         super.init(frame: frame)
        alignment()
     }

     required init?(coder aDecoder: NSCoder) {
         super.init(coder: aDecoder)
        alignment()
     }

     override func prepareForInterfaceBuilder() {
         super.prepareForInterfaceBuilder()
        alignment()
     }
    
    override func titleRect(forContentRect contentRect: CGRect) -> CGRect {
        var tempRect = contentRect
        tempRect.origin.x = titlePadding
        return tempRect
    }
    
    override func layoutSubviews() {
        super.layoutSubviews()
        addBottomLine()
    }
    func alignment(){
        contentVerticalAlignment = .bottom
    }
    func  addBottomLine(){
//        if bottomLineLayer == nil{
        for layer in self.layer.sublayers  ?? [] {
             if layer.name == "bottom" {
                  layer.removeFromSuperlayer()
             }
         }
            bottomLineLayer = CALayer()
            bottomLineLayer?.name = "bottom"
            bottomLineLayer?.frame = CGRect(x: 0.0, y: self.frame.height + 5, width: self.frame.width, height: 1.0)
            bottomLineLayer?.backgroundColor = bottomLineColor.cgColor
            self.layer.addSublayer(bottomLineLayer ?? CALayer())
//        }
    }
    func setupImages() {
        
        if let rightImage = rightHandImage {
            for views in self.subviews{
                if views.tag == 100{
                    views.removeFromSuperview()
                }
            }
            let rightImageView = UIImageView(image: rightImage)
            rightImageView.tag = 100
            rightImageView.tintColor = .black
            self.addSubview(rightImageView)
            rightImageView.translatesAutoresizingMaskIntoConstraints = false
            NSLayoutConstraint.activate([
                rightImageView.trailingAnchor.constraint(equalTo: self.trailingAnchor,constant: 0),
//                rightImageView.centerYAnchor.constraint(equalTo: self.centerYAnchor),
                rightImageView.bottomAnchor.constraint(equalTo: self.bottomAnchor,constant: 0),
                rightImageView.widthAnchor.constraint(equalToConstant: imageSize),
                rightImageView.heightAnchor.constraint(equalToConstant: imageSize)
            ])
        }
        
        if let rightImage = leftHandImage {
            for views in self.subviews{
                if views.tag == 101{
                    views.removeFromSuperview()
                }
            }
            let rightImageView = UIImageView(image: rightImage)
            rightImageView.tintColor = .black
            rightImageView.tag = 101
            self.addSubview(rightImageView)
            rightImageView.translatesAutoresizingMaskIntoConstraints = false
            NSLayoutConstraint.activate([
                rightImageView.leadingAnchor.constraint(equalTo: self.leadingAnchor,constant: 0),
//                rightImageView.centerYAnchor.constraint(equalTo: self.centerYAnchor),
                rightImageView.bottomAnchor.constraint(equalTo: self.bottomAnchor,constant: 0),
                rightImageView.widthAnchor.constraint(equalToConstant: imageSize),
                rightImageView.heightAnchor.constraint(equalToConstant: imageSize)
            ])
        }
    }
}
这条线没用

contentVerticalAlignment = .bottom
输出:


问题在于您没有调用布局子视图的超级方法。 试试这个


问题是您没有调用LayoutSubView的超级方法。 试试这个


谢谢你的回答,但仍然不起作用。我试过你的课程,当我运行我的应用程序时,它工作得很好。有多奇怪?检查我更新的问题并尝试修改代码使用此代码,您解决了上一个问题(这是您的原始问题)。对吗?我解决了左对齐问题,但文本也必须放在底部,这不起作用。答案是否定的,但仍然不起作用。我尝试了你们的课程,当我运行我的应用程序时,它工作正常。有多奇怪?检查我更新的问题并尝试修改代码使用此代码,您解决了上一个问题(这是您的原始问题)。对吗?我解决了左对齐问题,但文本也必须位于底部,这不起作用
override func layoutSubviews() {
    super.layoutSubviews()
    addBottomLine()
}