gpt4 book ai didi

ios - 自 Xcode 8 和 iOS10 起,viewDidLayoutSubviews 上的 View 大小不正确

转载 作者:IT王子 更新时间:2023-10-29 07:30:05 25 4
gpt4 key购买 nike

似乎在 Xcode 8 中,在 viewDidLoad 上,所有 viewcontroller subview 都具有相同的 1000x1000 大小。奇怪的是,但是没关系,viewDidLoad 从来都不是正确调整 View 大小的好地方。

但是 viewDidLayoutSubviews 是!

在我当前的项目中,我尝试打印按钮的大小:

- (void)viewDidLayoutSubviews {
[super viewDidLayoutSubviews];

NSLog(@"%@", self.myButton);
}

日志显示 myButton 的大小为 (1000x1000)!然后,如果我登录一个按钮,例如,日志显示正常大小。

我正在使用自动布局。

这是一个错误吗?

最佳答案

现在,Interface Builder 允许用户动态更改 Storyboard中每个 View Controller 的大小,以模拟特定设备的大小。

在此功能之前,用户应该手动设置每个 View Controller 的大小。所以view controller被保存了一定的大小,在initWithCoder中使用它来设置初始帧。

现在,initWithCoder 似乎没有使用 Storyboard 中定义的大小,而是为 viewcontroller View 及其所有 subview 定义了 1000x1000 像素的大小。

这不是问题,因为 View 应该始终使用以下布局解决方案之一:

  • 自动布局,所有约束都会正确布局您的 View

  • autoresizingMask,它将布局每个没有附加任何约束的 View (注意自动布局和边距约束现在在同一 View 中兼容\o/!)

但这所有与 View 层相关的布局问题,比如cornerRadius,因为autolayoutautoresizing mask 适用于图层属性。

要回答这个问题,常见的方法是在 Controller 中使用viewDidLayoutSubviews,或者在 View 中使用layoutSubview。此时(不要忘记调用它们的 super 相关方法),您非常确定所有布局都已完成!

漂亮确定吗?嗯......不完全是,我说过,这就是我问这个问题的原因,在某些情况下, View 在这种方法上仍然有 1000x1000 的大小。我认为我自己的问题没有答案。提供有关它的最大信息:

1- 仅在布局单元格时发生!在 UITableViewCellUICollectionViewCell 子类中,layoutSubview 不会在 subview 被正确布局后 被调用。

2- 正如@EugenDimboiu 所说(如果对您有用,请为他的回答点赞),在未布局的 subview 上调用[myView layoutIfNeeded] 将及时正确布局它。

- (void)layoutSubviews {
[super layoutSubviews];
NSLog (self.myLabel); // 1000x1000 size
[self.myLabel layoutIfNeeded];
NSLog (self.myLabel); // normal size
}

3- 在我看来,这绝对是一个错误。我已经将它提交给雷达(id 28562874)。

PS:我不是英语母语,所以如果我的语法需要更正,请随时编辑我的帖子;)

PS2:如果您有更好的解决方案,请不要写另一个答案。我将移动已接受的答案。

关于ios - 自 Xcode 8 和 iOS10 起,viewDidLayoutSubviews 上的 View 大小不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39578530/

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