[英]programmatically adding uilabel to view controller for xib causes 'No Visible @Interface' error
[英]Programmatically adding UILabel is not visible
我正在尝试在这里练习,我在我的视图中有一个SearchBar
并且我已经习惯了
func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String)
一旦用户开始写作,我就隐藏我的观点,并以编程方式制作另一个
但是一旦我正确地添加了第二个视图,我想添加一个UILabel。 这是我的代码:
self.word_of_the_day_view.isHidden = true // main view
self.popularView.frame = CGRect(x: self.searcy_bar_view.frame.minX, y: self.searcy_bar_view.frame.maxY + 15, width: self.searcy_bar_view.frame.width, height: self.searcy_bar_view.frame.height) // don't mind the height and width
self.popularView.backgroundColor = .white
self.popularView.layer.cornerRadius = self.searcy_bar_view.layer.cornerRadius
self.popularView.popIn() // just an animation
is_popular_added = true
self.view.addSubview(popularView)
let label_1 = UILabel()
label_1.frame = CGRect(x: self.popularView.frame.minX + 3, y: self.popularView.frame.minY, width: self.popularView.frame.width, height: 20)
label_1.font = UIFont(name: "avenirnext-regular", size: 13)
label_1.text = "Hello World!"
label_1.layer.borderColor = UIColor.red.cgColor
popularView.addSubview(label_1)
但是在运行时,甚至没有添加UILabel。
非常感谢你甚至阅读这个问题!
您需要了解Frame和Bounds之间的区别。 视图的框架是视图在其超视图中的位置,因此其原点可以具有CGPoint的任何值。 Bounds只是视图本身,因此它的起源始终为(0,0)
我认为问题是
label_1.frame = CGRect(x: self.popularView.frame.minX + 3, y: self.popularView.frame.minY, width: self.popularView.frame.width, height: 20)
试着改变
label_1.frame = CGRect(x: self.popularView.bounds.minX + 3, y: self.popularView.bounds.minY, width: self.popularView.frame.width, height: 20)
要么
label_1.frame = CGRect(x: 3, y: 0, width: self.popularView.frame.width, height: 20)
在你的代码中
label_1.frame = CGRect(x: self.popularView.frame.minX + 3, y: self.popularView.frame.minY, width: self.popularView.frame.width, height: 20)
这是因为self.popularView.frame.minX
和self.popularView.frame.minY
有一些+值,它跨越您尝试添加label_1
的当前视图的边界。 你应该使用self.popularView.bounds.origin.x and self.popularView.bounds.origin.y
边界和框架之间的差异
frame =视图相对于父视图坐标系的位置和大小
bounds =使用自己的坐标系统查看视图的大小
这个问题是由于帧和边界之间的混淆。 我的应用程序也遇到了类似的问题。
UIView
的边界是矩形,表示为相对于其自身坐标系(0,0)的位置(x,y)和大小(宽度,高度)。
UIView
的框架是矩形,表示为相对于其所包含的超视图的位置(x,y)和大小(宽度,高度)。
你应该使用self.popularView.bounds.origin.x
和self.popularView.bounds.origin.y
代替self.popularView.frame.minX
和self.popularView.frame.minY
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.