帧高度打印0



正如问题所述,当我试图在UIView类中设置图像视图时,要将其帧高度的角半径除以2,这不起作用,所以我决定打印帧高度,它是0。

这个类中每个视图的高度或宽度打印为0,我不知道为什么…谢谢你的回答。

我找到问题了。当调用uiview类时,我没有通过参数传递这个视图的实际框架。所以当这个类初始化器被执行时帧总是0

默认情况下,视图没有大小。你必须为视图的框架设置一些约束。

1。约束:当在viewDidLoad()中设置约束时,视图不会立即获得大小。为了读取大小,您必须在另一个称为viewDidLayoutSubviews()的函数中读取它。这个函数在所有视图被布置后被调用。下面是一个示例,视图将获得其父视图的大小:

    var newView:UIView?
    override func viewDidLoad() {
        super.viewDidLoad()
        newView = UIView()
        newView!.translatesAutoresizingMaskIntoConstraints = false
        self.view.addSubview(newView!)
        newView!.leftAnchor.constraint(equalTo: self.view.leftAnchor).isActive = true
        newView!.rightAnchor.constraint(equalTo: self.view.rightAnchor).isActive = true
        newView!.topAnchor.constraint(equalTo: self.view.topAnchor).isActive = true
        newView!.bottomAnchor.constraint(equalTo: self.view.bottomAnchor).isActive = true
    }

    override func viewDidLayoutSubviews() {
        print(newView!.frame)
    }

2。Frame:通过直接设置视图帧,你可以立即读取它的大小。下面是一个例子,视图的框架被设置为与其父视图相同的边界:

    var newView:UIView?
    override func viewDidLoad() {
        super.viewDidLoad()
        newView = UIView()
        newView?.frame = view.bounds
        newView!.translatesAutoresizingMaskIntoConstraints = false
        self.view.addSubview(newView!)
        print(newView!.frame)
    }

最新更新