2 回答
TA贡献1868条经验 获得超4个赞
不能保证在viewDidLoad中该框架与最终显示该视图时的框架相同。UIKit会在显示视图上下文之前,先调整视图控制器视图的框架。大小是根据界面方向和任何可见的导航栏,标签栏,工具栏或状态栏(其本身的高度可以更改,例如在通话中)的大小确定的。
它有助于了解加载和显示视图控制器的视图时发生的情况:
某些东西
view
首次访问了视图控制器的属性。这可能发生在您自己的代码中,也可能发生在UIKit中,以响应诸如选择选项卡之类的用户操作。UIKit通过调用(
loadView
如果已定义)或通过从中指定的NIB加载视图来延迟加载视图控制器的视图initWithNibName:bundle:
。如果两者都不存在,则UIKit只会加载一个空视图。viewDidLoad
一旦视图及其子视图已完全加载,UIKit就会调用。 此时,视图的框架将是在NIB或中设置的框架loadView
。需要UIKit来显示视图控制器的视图。同样,这可能是用户操作,例如点击选项卡,或者是代码中的显式方法调用,例如
pushViewController:animated:
或presentModalViewController:animated:
。如上所述,UIKit根据将在其中呈现的上下文调整视图的大小。
UIKit调用
viewWillAppear:
。 现在,框架应为将要显示的尺寸。 (?)编辑:这可能不再正确。请参阅下面的评论。UIKit显示视图,带有或不带有动画。
UIKit调用
viewDidAppear:
。
如您所见,如果您需要在呈现视图之前知道视图框架的大小,则这viewWillAppear:
是您唯一的机会。请记住,由于各种原因(包括旋转事件或状态栏高度的更改),视图出现后此大小可能会更改。因此,为每个子视图提供适当的autoresizingMask非常重要,以确保布局可以针对边界的任何更改进行适当调整。
如果希望手动构建视图层次结构,建议在loadView中进行构建。由于您可以使用此方法自行构造视图,因此可以将其框架初始化为所需的任何形式。您选择的大小无关紧要,因为UIKit可能会在您身上进行更改。只要确保您正确设置了autoresizingMask。
TA贡献1825条经验 获得超4个赞
你班上会有一个方法
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
// Return YES for supported orientations return YES; }
用这种方法放置框架...这样就可以正常工作。
例如:
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
// Return YES for supported orientations
if(interfaceOrientation == UIDeviceOrientationPortrait || UIDeviceOrientationPortraitUpsideDown)
self.view.frame = CGRectMake(0, 0, FRAME.WIDTHinPOTRAIT, FRAME.HEIGHTinPOTRAIT);
else if(interfaceOrientation == UIDeviceOrientationLandscapeRight || UIDeviceOrientationLandscapeLeft)
self.view.frame = CGRectMake(0, 0, FRAME.WIDTHinLANDSCAPE, FRAME.HEIGHTinLANDSCAPE);
return YES;
}
FRAME.WIDTH>所需宽度FRAME.HEIGHT>所需高度
- 2 回答
- 0 关注
- 394 浏览
添加回答
举报