Swift 未显示自定义UIVIew

Swift 未显示自定义UIVIew,swift,uiview,Swift,Uiview,我创建了一个简单的UIView类,它将在运行时显示一个标签 @IBDesignable class CalendarDayView: UIView { var dayLabel = UILabel() @IBInspectable var day: Int { set { dayLabel.text = String(newValue) } get { return Int

我创建了一个简单的UIView类,它将在运行时显示一个标签

@IBDesignable
class CalendarDayView: UIView {

    var dayLabel = UILabel()

    @IBInspectable
    var day: Int {
        set {
            dayLabel.text = String(newValue)
        }
        get {
            return Int(dayLabel.text!)!
        }
    }

    override init(frame: CGRect) {
        super.init(frame: frame)
        prepareSubviews()
    }

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

    func prepareSubviews() {
        dayLabel.backgroundColor = UIColor.blue
        addSubview(dayLabel)
        dayLabel.centerXAnchor.constraint(equalTo: self.centerXAnchor)
        dayLabel.centerYAnchor.constraint(equalTo: self.centerYAnchor)
        dayLabel.widthAnchor.constraint(equalTo: self.widthAnchor)
        dayLabel.heightAnchor.constraint(equalTo: self.heightAnchor)
        setNeedsLayout()
    }
}
我在故事板的简单视图控制器上添加了UIView,并将其宽度和高度设置为100。在属性检查器中,日期值设置为1


我看不到自定义视图背景色(应该是蓝色)或标签(应该显示1)。我遗漏了什么吗?

哇,我自己可能犯过1000次这个错误,真不敢相信我一眼就认不出来(这可能就是我犯过1000次的原因)


您是否设置了
dayLabel
的宽度和高度?自动布局约束不应该考虑这一点吗?但是,您可能需要设置
dayLabel.translatesAutoResizezingMaskintoConstraints=false
。此外,您是否明确设置了
日历日视图的框架?尝试在帧初始化并添加到您添加到的任何superview中后,输入断点并打印出帧。这无法解决为什么不显示自定义视图背景色的问题。“dayLabel.TranslatesAutoResizezingMaskintoConstraints=false”帮助。这是做什么的?iOS将自动为以编程方式创建的UIView生成约束。这些将与您自己添加的任何约束冲突。这一行告诉IOS不要创建那些约束,因此唯一重要的约束是您通过编程创建的约束。感谢您的解释,但是IOS将生成什么作为默认约束?不完全确定。我认为这取决于如何设置帧边界和位置,以及如何设置自动调整大小的遮罩。我总是觉得这太复杂了,不值得。相反,我编写了一个
UIView
扩展,它封装了所有的自动布局功能。我也真的不喜欢界面生成器。
// .isActive = true
dayLabel.centerXAnchor.constraint(equalTo: self.centerXAnchor).isActive = true
dayLabel.centerYAnchor.constraint(equalTo: self.centerYAnchor).isActive = true
dayLabel.widthAnchor.constraint(equalTo: self.widthAnchor).isActive = true
dayLabel.heightAnchor.constraint(equalTo: self.heightAnchor).isActive = true