如果在“viewWillAppear”或“viewDidLoad”方法中完成,视图不会调整大小

Posted

技术标签:

【中文标题】如果在“viewWillAppear”或“viewDidLoad”方法中完成,视图不会调整大小【英文标题】:View not resizing if done in the "viewWillAppear" or "viewDidLoad" method 【发布时间】:2014-02-11 14:44:28 【问题描述】:

我正在开发一个游戏:我需要加载用户的分数(本地,如果互联网可用,从服务器下载)并根据值调整 UIView 的大小。

问题是当本地加载分数时(从 viewWillAppear 调用“resizeUserBar”),没有视图被调整大小。但是,如果在从服务器下载分数后调用相同的方法(“resizeUserBar”),它会正确调整大小。我已经调试了框架的值,它们在两种情况下都是正确的。

这是我用来调整大小的代码:

CGRect frame = firstBar.frame;
frame = CGRectMake(frame.origin.x, frame.origin.y, firstBarSpace, frame.size.height);
firstBar.frame = frame;

frame = secondBar.frame;
frame = CGRectMake(firstBar.frame.origin.x + firstBarSpace, frame.origin.y, secondBarSpace, frame.size.height);
secondBar.frame = frame;

自动布局在我的 Storyboard 上处于活动状态,但我还没有使用它。上述方法中使用的视图没有任何限制。

谢谢 谢谢

【问题讨论】:

【参考方案1】:

你说:

自动布局在我的 Storyboard 上处于活动状态,但我还没有使用它。那里 对上述方法中使用的视图没有任何限制。

在 Xcode 5 中,如果您开启了 Auto Layout 但未设置任何约束,编译器将在构建时自动为您生成固定大小和位置约束。

关闭自动布局,您会看到调整大小将开始起作用。或者,设置一些实际的约束。

更新:更多信息……

Auto Layout Guide: Working with Constraints in Interface Builder 在 Apple.com 上

当您从对象库中拖出一个元素并将其放置在 Interface Builder 画布,它开始不受约束地制作它 通过拖动元素轻松制作界面原型。如果你 在不向元素添加任何约束的情况下构建和运行,您将 发现 Interface Builder 修复了元素的宽度和高度,并且 将其位置固定在超级视图的左上角; 这意味着调整窗口大小不会移动或调整窗口大小 元素。为了使您的界面对大小的变化做出正确的反应或 方向,你需要开始添加约束。

【讨论】:

以上是关于如果在“viewWillAppear”或“viewDidLoad”方法中完成,视图不会调整大小的主要内容,如果未能解决你的问题,请参考以下文章

如何使用情节提要 iOS7 调用 viewWillAppear

在啥情况下 viewWillAppear 会被调用?

SwiftUI 中的 viewWillAppear() 或其他等效项

viewController的生命周期

从弹出的 UINavigationController 或 UITabBarController 确定 viewWillAppear

控制器 view 的生命周期变化总结