正如问题所述,当我试图在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)
}