Ios UIButton子视图在子类中偏移
我有一个UIButton子类,用于显示按钮的选定状态。选定状态只是在按钮视图的底部放置一条粗黑线,未选中时隐藏黑线。但是,在UIButton子类中使用此选项时,黑线视图是偏移的。我尝试过使用插图,但我认为这不是问题所在。下面是我的子类:Ios UIButton子视图在子类中偏移,ios,swift,uibutton,Ios,Swift,Uibutton,我有一个UIButton子类,用于显示按钮的选定状态。选定状态只是在按钮视图的底部放置一条粗黑线,未选中时隐藏黑线。但是,在UIButton子类中使用此选项时,黑线视图是偏移的。我尝试过使用插图,但我认为这不是问题所在。下面是我的子类: class TabButton: UIButton { private var height:CGFloat = 5 private var selectedIndicator:UIView? override var isSelec
class TabButton: UIButton {
private var height:CGFloat = 5
private var selectedIndicator:UIView?
override var isSelected: Bool {
didSet {
selectedIndicator?.isHidden = !isSelected
}
}
fileprivate func initializeSelector(_ frame: CGRect) {
selectedIndicator = UIView(frame: CGRect(x: 0, y: frame.size.height - height, width: frame.size.width, height: height))
selectedIndicator?.backgroundColor = UIColor.black
self.addSubview(selectedIndicator!)
}
override func awakeFromNib() {
super.awakeFromNib()
initializeSelector(self.frame)
}
}
所需的按钮应如下所示:
但实际上它看起来是这样的:
有人能帮我理解这里发生了什么,以及如何解决它吗?谢谢 试试这个,在LayoutSubView中,您会看到最后一帧:
override layoutSubviews() {
super.layoutSubviews()
selectedIndicator.frame = CGRect(x: 0, y: frame.size.height - height, width: frame.size.width, height: height)
}
调用
initializeSelector
时,selectedIndicator
的框架只设置一次。当按钮更改其框架时,它不会更改子视图的框架,您需要手动更新所选指示器的框架
为此,您需要重写UIView
的方法
override layoutSubviews() {
super.layoutSubviews()
selectedIndicator?.frame = CGRect(x: 0, y: frame.size.height - height, width: frame.size.width, height: height)
}
请参阅答案以了解何时调用
layoutSubviews()
。此答案错误。通过调用initializeSelector()
insidelayoutSubviews
您将最终拥有多个(调用的layoutSubviews
的数量)黑色视图作为按钮的子视图,因为initializeSelector
插入了一个新的黑色UIView
作为子视图。您是对的,谢谢;)我是从移动应用程序写的,我没有注意到该方法正在添加视图。我确信他是在从nib唤醒中添加视图。