gpt4 book ai didi

ios - UIView super View 字段未设置

转载 作者:行者123 更新时间:2023-11-29 02:10:50 25 4
gpt4 key购买 nike

所以这是一个奇怪的。我的布局包含一个 UIVIew * 标题元素、一个 UIButton * 页脚元素和一个位于它们之间的 UITableView * 元素。

//each of these are instantiated in their own lazyload method
[self.view addSubview:self.headerView];
[self.view addSubview:self.tableView];
[self.view addSubview:self.footerButton];

NSDictionary * viewList= @{
@"header":self.headerView,
@"table":self.tableView,
@"footer":self.footerButton
};
[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[header(40)][table][footer(50)]|" options:0 metrics:nil views:viewList]];
[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[header]|" options:0 metrics:nil views:viewList]];
[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[table]|" options:0 metrics:nil views:viewList]];
[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[footer]|" options:0 metrics:nil views:viewList]];

现在,执行在第一次调用 addConstraints 时失败,并显示以下消息:

*** Terminating app due to uncaught exception 'NSInvalidArgumentException',     
reason: 'Unable to parse constraint format:
Unable to interpret '|' character, because the related view doesn't have a superview
V:|[header(40)][table][footer(50)]|
^'

我所有的 View 都将 translatesAutoresizingMaskIntoConstraints 设置为 NO

奇怪的是,如果我在添加约束之前使用 NSLog,我可以看到 self.view.subviews 正确地列出了所有三个 View 。但是,self.footerButton.superview 不知为何是 nil(其他两个没问题)。

一个 View 如何被添加到 View 层次结构,但不设置它自己的父 View ?

最佳答案

想通了。 footerButton 的延迟加载 getter 意外返回了本来要分配给 ivar 的临时 View ,而不是返回 ivar 本身,因此每次调用 self.footerButton 都会返回一个新实例。因此,第一次调用被正确分配给父 View ,但在构建 viewList 时,它是创建一个未分配给任何内容的新 View 。

关于ios - UIView super View 字段未设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29303283/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com