繁体   English   中英

以编程方式添加UILabel不可见

[英]Programmatically adding UILabel is not visible

我正在尝试在这里练习,我在我的视图中有一个SearchBar并且我已经习惯了

  func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) 

一旦用户开始写作,我就隐藏我的观点,并以编程方式制作另一个

这是我的概念,一旦我开始写作,我的第二个观点就出现了: GIF

但是一旦我正确地添加了第二个视图,我想添加一个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.minXself.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.xself.popularView.bounds.origin.y代替self.popularView.frame.minXself.popularView.frame.minY

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM