UIView 子类边界在控制台中不正确

Posted

技术标签:

【中文标题】UIView 子类边界在控制台中不正确【英文标题】:UIView subclass bounds incorrect in console 【发布时间】:2017-01-04 19:15:03 【问题描述】:

在这里,我创建了 UIView 子类,命名为 CustomSlider。在 Storyboard 上添加了 CustomSlider 并与 Storyboard 插座参考连接。当我打印边界时,我在打印边界时遇到问题,它提供了不正确的控制台输出。

 class CustomSlider: UIView 

        required init(coder aDecoder: NSCoder) 
            super.init(coder: aDecoder)!
        
        override init(frame: CGRect) 
            super.init(frame: frame)
            self.setupView()
        
        func setupView()  
            print("self.bounds.height \(self.bounds)" )
            self.backgroundColor = UIColor.red
        
    


class ViewController: UIViewController  
    @IBOutlet weak var slider: CustomSlider?

    override func viewDidLoad() 
        super.viewDidLoad()
        slider?.setupView()
    

当我尝试构建输出边界时,显示如下:

self.bounds.height (0.0, 0.0, 1000.0, 1000.0) 

但我设置了尾随、顶部、右侧、高度的约束。我也尝试过以下行。

slider?.translatesAutoresizingMaskIntoConstraints = false

这是我的项目的截图

我预期的控制台输出将是滑块边界。

【问题讨论】:

【参考方案1】:

您打印bounds 的电话来得太早了。在 layout 发生之前,从 xib/storyboard 加载的视图具有虚假边界(如图所示)。布局在viewDidLoad没有发生;视图还没有出现在界面中,并且 no 尺寸是真实的。将您对bounds 的访问推迟到至少在第一次调用viewDidLayoutSubviews 之后。

【讨论】:

以上是关于UIView 子类边界在控制台中不正确的主要内容,如果未能解决你的问题,请参考以下文章

在视图控制器中访问 UIView 子类

UIView clipsToBounds不起作用

子类 UIView 以在当前视图控制器上显示框

从 UIView 子类推送导航控制器会导致崩溃

iOS:使用 nib 子类化 UITableViewCell,进入 UIView(不是视图控制器)子类

在缩放的 CGRect iOS 上显示 UIView