【问题标题】:UIView layoutSubviews notificationUIView layoutSubviews 通知
【发布时间】:2021-07-29 13:23:47
【问题描述】:

我有一个关于 UIView layoutSubviews 的问题

class ViewController: UIViewController {
    let v1 = SubView1()
    
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
        
        view.addSubview(v1)
        
        v1.frame = CGRect(x: 50, y: 50, width: 70, height: 30)
    }
}

class SubView1: UIView {
    let subView = SubView2()
    
    override func layoutSubviews() {
        super.layoutSubviews()
        
        print("layoutSubviews SubView1")
    }
    
    override init(frame: CGRect) {
        super.init(frame: frame)
        
        var frame = subView.frame
        frame.origin = CGPoint(x: 0, y: 0)
        frame.size.width = 50
        subView.frame = frame
        
        addSubview(subView)
    }
    
    required init?(coder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
}

class SubView2: UIView {
    let label = UILabel()
    
    override func layoutSubviews() {
        super.layoutSubviews()
        
        print("layoutSubviews SubView2")
        
        var frame = label.frame
        frame.origin = CGPoint(x: 10, y: 10)
        frame.size.width = self.frame.width - 20
        label.frame = frame
        
        label.sizeToFit()
        
        frame = self.frame
        frame.size.height = label.frame.size.height + 20
        self.frame = frame
    }
    
    override init(frame: CGRect) {
        super.init(frame: frame)
        
        label.numberOfLines = 0
        label.text = "test test test test test test test test"
        
        addSubview(label)
    }
    
    required init?(coder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
}

此代码打印:

layoutSubviews 子视图1
layoutSubviews 子视图2

我想调整 SubView1 以便 SubView1 环绕 SubView2。
但是 SubView2'frmae 是在调用 'layoutSubviews SubView2' 时确定的。 (我不知道在'layoutSubviews SubView1')

我想知道如何在'layoutSubviews SubView2'之后注意SubView1

【问题讨论】:

    标签: swift layout uiview


    【解决方案1】:

    你接近的方式很艰难。我对实现你想要的东西的建议将遵循

    1. 使用自动布局 使用自动布局约束布局您想要的布局。这是制作生产应用的实用方法。

    https://developer.apple.com/library/archive/documentation/UserExperience/Conceptual/AutolayoutPG/index.html

    1. 没有自动布局 如果您坚持不使用自动布局,请使用“viewDidLayoutSubviews”回调。这是一个视图控制器回调,当视图控制器布局所有视图时调用。在这里你肯定知道,这个视图控制器中的所有子视图都被夸大了。

    https://developer.apple.com/documentation/uikit/uiviewcontroller/1621398-viewdidlayoutsubviews

    其中我更喜欢自动布局,因为有很多事情需要整理,而不是在 ios 应用程序中布局视图。

    【讨论】:

      猜你喜欢
      • 2011-02-28
      • 2011-11-26
      • 1970-01-01
      • 1970-01-01
      • 2014-08-29
      • 1970-01-01
      • 2011-09-01
      • 1970-01-01
      • 2013-03-14
      相关资源
      最近更新 更多