未显示自定义 UIVIew

Posted

技术标签:

【中文标题】未显示自定义 UIVIew【英文标题】:Custom UIVIew is not shown 【发布时间】:2017-03-01 23:08:23 【问题描述】:

我创建了一个简单的 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)。我错过了什么吗?

【问题讨论】:

dayLabel的宽高你设置了吗? 自动布局约束不应该解决这个问题吗? 但是,您可能需要设置dayLabel.translatesAutoresizingMaskIntoConstraints = false 另外,您是否明确设置了CalendarDayView 的框架?尝试在框架初始化并添加到您添加到的任何超级视图后放置一个断点并打印出框架。 这并不能解决我的自定义视图背景颜色未显示的原因。 【参考方案1】:

哇,我自己可能遇到过这个错误 1000 次,不敢相信我第一眼就没有认出它(这可能也是我遇到过 1000 次的原因)。

// .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

【讨论】:

"dayLabel.translatesAutoresizingMaskIntoConstraints = false" 有帮助。这是做什么的? ios 将自动为以编程方式创建的 UIView 生成约束。这些将与您自己添加的任何约束相冲突。该行告诉 IOS 不要创建这些约束,因此唯一重要的约束是您以编程方式创建的约束。 谢谢你的解释,但是IOS会生成什么作为默认约束呢? 不完全确定。我认为这取决于您如何设置框架边界和位置,以及您如何设置自动调整大小的蒙版。我一直觉得它太复杂了,不值得。相反,我编写了一个 UIView 扩展来封装所有 AutoLayout 功能。我也真的不喜欢 Interface Builder。

以上是关于未显示自定义 UIVIew的主要内容,如果未能解决你的问题,请参考以下文章

UILabel 未显示在自定义 UIView 屏幕中

自定义 UIView 标签和动画未显示在视图控制器中

将布局更改为自定义类后,UicollectionViewCell 未显示

自定义 RatingView IOS 中未显示 Star-Half 图像

自定义标签栏背景图像未正确显示

自定义 UIView:未调用 UIButton addTarget