我真的需要帮忙 我创建了UILabel的@IBDesignable子类,该子类在XCode Interface Builder中可以正常工作。但是,即使将'clipsToBounds'设置为false,Interface Builder仍会在更改@IBInspectable属性的同时对其进行裁剪。
如果我在模拟器或设备上运行该应用程序,则不会裁剪UILabel,而是会为我提供所需的结果(同时仍应用Interface Builder的值)。
更改之前(子视图可见)
接口构建器更改后(子视图不在视图中)
在模拟器中进行更改之后(子视图符合预期)
任何帮助将不胜感激。自定义类的代码如下。
@IBDesignable class UIFeaturedLabel: UILabel {
@IBInspectable var borderWidth: Float = 4
@IBInspectable var borderOffsetX: Float = 15
@IBInspectable var borderOffsetY: Float = 5
@IBInspectable var borderColor: UIColor = UIColor.whiteColor()
private var headerView:UIView!
private var footerView:UIView!
override init() {
super.init()
createViews()
}
required init(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
createViews()
}
override init(frame: CGRect) {
super.init(frame: frame)
createViews()
}
func createViews() {
clipsToBounds = false
layer.masksToBounds = false
headerView = UIView()
footerView = UIView()
headerView.backgroundColor = UIColor.whiteColor()
footerView.backgroundColor = UIColor.whiteColor()
addSubview(headerView)
addSubview(footerView)
}
override func layoutSubviews() {
super.layoutSubviews()
let left = CGFloat( -borderOffsetX )
let right = CGFloat( frame.width + CGFloat(borderOffsetX*2) )
let top = CGFloat( -borderOffsetY )
let bottom = CGFloat( frame.height - CGFloat(borderWidth/2) ) + CGFloat( borderOffsetY )
headerView.frame = CGRectMake(left, top, right, CGFloat(borderWidth))
footerView.frame = CGRectMake(left, bottom, right, CGFloat(borderWidth))
}
}
XCode 7.3 iOS9.3仍会发生,但已在XCode版本8.0 beta(8S128d)中修复。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句