init中的帧大小在触摸后不同

时间:2013-06-07 15:20:07

标签: ios objective-c

我觉得答案很明显,但我找不到问题的答案。很抱歉,如果我问过之前被问过的话。

init 中跟踪 uiview 帧高时,它会指出高度 480px 。 当我在手势(或if (self)之外)完成后跟踪相同高度时,它会指出高度 460px ,因此它“删除”框架中的状态栏。我真的不明白为什么会发生这种情况,它使动态垂直居中成为一种痛苦。我希望在初始化中帧为460px,所以我不必减去10px来使我的视图/图像居中。

我刚做了一个没有任何内容的简单项目,我把它设置成这样:

控制器

- (void)loadView
{
    CGRect frame = [[UIScreen mainScreen] bounds];
    self.centerview = [[CenterView alloc] initWithFrame:frame];
    [self setView:self.centerview];
}

提前感谢您的帮助:)

2 个答案:

答案 0 :(得分:0)

UIScreen的大小包括状态栏和任何其他元素,如导航栏和标签栏,因此iPhone 4S或更低版本将为480. UIView的大小将只是可用空间。

如果您不需要状态栏,则可以将其隐藏,以便您可以使用屏幕的完整大小。

更好的是仍然可以获得正在加载的视图的大小,以便您可以

CGRect frame = self.view.superview.bounds;

而不是使用UIScreen

答案 1 :(得分:0)

applicationFrame上使用bounds代替mainScreen。来自文档:

  

此属性包含屏幕边界减去占用的区域   状态栏,如果可见。使用此属性是   建议的方法来检索应用程序的初始窗口大小。   矩形以点数指定。

向centerview添加新视图的第二个问题可能是混合边界和框架。如果您希望将新视图添加到与中心视图相同的大小并位于相同位置,请执行以下操作:

UIView *newView = [[UIView alloc] initWithFrame:self.centerView.bounds];
[self.centerView addSubview:newView];