ios - 当我尝试以编程方式设置标签时没有标签
问题描述
我是以编程方式制作 UI 的新手。我想在单击单元格行后创建一个新视图并在那里显示一个标签,但是当应用程序转到该视图时,除了白屏之外什么都没有。有谁知道如何解决我的问题?
细节视图控制器:
class DetailViewController: UIViewController {
var data: DataModel!
var firstAndLastNameLabel = UILabel()
let contentView = UIView()
let scrollView = UIScrollView()
override func viewDidLoad() {
super.viewDidLoad()
print("DETAIL VIEW CONTROLLER: \(String(describing: data))")
view.backgroundColor = .white
self.view.addSubview(firstAndLastNameLabel)
set()
setFirstAndLastNameLabel()
}
func set() {
firstAndLastNameLabel = UILabel(frame: CGRect(x: 10, y: 50, width: 150, height: 35))
firstAndLastNameLabel.center = CGPoint(x: 160, y: 260)
firstAndLastNameLabel.text = "\(data.firstName) \(data.lastName)"
}
func configureFirstAndLastNameLabel() {
firstAndLastNameLabel.numberOfLines = 0
}
}
解决方案
当您以编程方式创建新视图时,您还需要将其作为子视图添加到其他视图中。
在这种情况下,它可以是您的视图控制器视图:
view.addSubview(firstAndLastNameLabel)
或者,您可以根据需要添加contentView
到控制器视图,然后将标签添加到contentView
。在这种情况下,您还需要添加框架contentView
。
view.addSubview(contentView)
contentView.addSubview(firstAndLastNameLabel)
有点题外话。拥有静态框架根本不是一个好主意,因为您的 UI 在不同的设备上看起来会完全不同。
最方便的方法是使用布局约束——与您在情节提要中使用的相同。查看这篇文章,了解如何以编程方式使用它们。
如果你想使用原始帧,你必须在里面做viewDidLayoutSubviews
:在那里你可以获得控制器视图的实际大小并相应地计算嵌套视图的帧。
推荐阅读
- javascript - ScrollView not scrolling all the way down with ImageBackground components react native
- c# - 带有 Signalr 的 Blazor 服务器 - 通过第三方 OAuth 对用户进行身份验证
- flutter - 将相同值的点渲染到折线图中 | 颤振图
- r - 试图在 R 中关联两个变量
- spring-boot - 多个 bootRun 任务失败
- python - 相对于原点累积滑动窗口
- sql - 不聚合的枢轴列出所有非字符内容
- css - 将 Material UI 按钮定位到行的最右侧
- c++ - 我怎样才能让这个 std::conditional 不评估基于类型的表达式?
- javascript - 在多个 select2 输入中显示选择到搜索建议中的值