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