如果在“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
SwiftUI 中的 viewWillAppear() 或其他等效项
从弹出的 UINavigationController 或 UITabBarController 确定 viewWillAppear