Swift - UIView 完成更新其框架时?

Posted

技术标签:

【中文标题】Swift - UIView 完成更新其框架时?【英文标题】:Swift - UIView when done updating its frame? 【发布时间】:2017-05-02 08:17:11 【问题描述】:

我有一个UITableViewCell,我在其中添加了我的自定义视图,比如说

class MyView: UIView 

    override init(frame: CGRect) 
        super.init(frame: frame)
    

    required init?(coder aDecoder: NSCoder) 
        super.init(coder: aDecoder)
    

    convenience required init(size: CGFloat) 
        self.init(frame: CGRect.zero)

        height = size

        // init my other sub contents [1]
    

来自我的UITableViewCell

let myView = MyView(size: 35)
contentView.addSubView(myView)

我的问题:我在 MyView 中的其他 UI 组件依赖于 MyViewwidthheight,现在设置它们在 [1] 中的位置还为时过早,因为 MyView 的框架现在是 @ 987654331@

我应该将我的其他 UI 组件放在 MyView 的什么位置? UIView 中是否有代表告诉我:“嘿,视图的框架已更新为其实际大小。”? (如viewDidAppear 中的UIViewController

问候,

【问题讨论】:

【参考方案1】:

你可以的

override var frame: NSRect 
    didSet 
        //update your subviews
    

在您的MyView 课程中。但实际上,您应该只考虑设置适当的约束:

https://developer.apple.com/library/content/documentation/UserExperience/Conceptual/AutolayoutPG/

【讨论】:

我在didSet 中打印出frame 的值,发现它只被调用了一次,其值为:(0.0, 0.0, 0.0, 0.0)。这不是我期望的大小。 那是因为你没有在某个时候自己设置它。您是在暗示框架稍后会在某处发生更改 - 我已经为您提供了通知该更改的代码,但您需要确保做出更改。

以上是关于Swift - UIView 完成更新其框架时?的主要内容,如果未能解决你的问题,请参考以下文章

为啥在 Swift 中使用惰性 var 初始化时添加框架不显示 UIView

在 Swift 运行时更改自动布局约束的 UIView 的框架

从自定义 UIView 类设置视图宽度约束不更新帧

UITapGestureRecognizer 在完成之前不会更新 UIView

Swift:动画后将 UIView 的帧重置为其约束

更新 UIView 会产生子视图对齐/Swift 的散列