似乎在viewDidLoad上使用Xcode8时,所有的视图控制器子视图的大小都是viewDidLoad0xviewDidLoad0.奇怪的是,但是好吧,viewDidLoad从来都不是正确调整视图大小的最佳位置.

但是viewDidLayoutSubviews才是!

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

- (void)viewDidLayoutSubviews {
    [super viewDidLayoutSubviews];

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

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

我用的是自动布局.

是虫子吗?

推荐答案

现在,Interface Builder允许用户动态更改情节提要中每个视图控制器的大小,以模拟特定设备的大小.

在此功能之前,用户应手动设置每个视图控制器的大小.因此,视图控制器以一定的大小保存,并在initWithCoder中用于设置初始帧.

现在,initWithCoder似乎没有使用情节提要中定义的大小,而是为视图控制器视图和它的所有子视图定义了initWithCoder0xinitWithCoder0px的大小.

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

  • 自动布局,所有约束将正确布局视图

  • 自动调整蒙版大小,它将布局没有附加任何约束的每个视图(note autolayout and margin constraints are now compatible in the same view \o/ !)

但是这is对于所有与视图层相关的布局material 来说都是一个问题,比如cornerRadius,因为autolayoutautoresizing mask都不适用于图层属性.

要回答此问题,如果您在控制器中,则通常使用viewDidLayoutSubviews;如果您在视图中,则使用layoutSubview.至此(不要忘记调用它们的super个Relative方法),您非常确定所有布局工作都已完成!

百分之百确定?哼...不完全是,我已经说过了,这就是我问这个问题的原因,在某些情况下,视图在这种方法上仍然有Pretty0xPretty0的大小.我想我自己的问题没有答案.要提供有关它的最多信息,请执行以下操作:

1-只有在布置单元时才会发生!在UITableViewCell&;UICollectionViewCell个子类,layoutSubview子类不会被称为after子视图将被正确布局.

2-正如@EugenDimboiu comments 的那样(如果对你有用,请向上投票他的答案),在未布局的子视图上呼叫[myView layoutIfNeeded]将及时正确地布局.

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

3-依我之见,这绝对是个漏洞.我已经把它提交给雷达了(Id 28562874).

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

PS2:如果你有更好的解决方案,请不要再写其他答案.我将提出被接受的答案.

Ios相关问答推荐

如何调整包含extView的UICollectionViewListCell的大小?

如何在iOS中以编程方式推送另一个页面?

如何将Safari调试器附加到Turbo-iOS原生应用中的模拟器

如何从Windows PC在iPhone上安装Flutter 应用程序

Flutter iOS 键盘问题:. TextInputType.number 中缺少字符

如何更改 SwiftUI 弹出视图的大小?

核心媒体基础知识,了解 CMSampleBuffer、CMBlockBuffer 和 CMSampleBufferGetAudioBufferListWithRetainedBlockBuffer

为什么这个 init 被分派到一个内部扩展 init?

iOS 16 中的状态栏 colored颜色

SwiftUI 中的描边图像边框

在 iPad 上删除列表的顶部和底部行

如何将标准化坐标系中的点的位置转换为具有相对位置的常规坐标系?

无法同时满足约束 - 没有适当的约束

iOS:使用 UIView 的 'drawRect:' 与其层的委托 'drawLayer:inContext:'

如何比较两个 UIImage 对象

刷新由 Xcode 7 管理的团队配置文件中的设备?

@IBDesignable 崩溃代理

呈现和关闭模态视图控制器

Select 器touchesBegan:withEvent:的覆盖方法具有不兼容的类型(NSSet,UIEvent)->()

iOS在应用程序中下载并保存图像