iPhone 5上的UIView高度不对

ran*_*dom 13 xcode objective-c uiview cgrect

我正在使用我的应用程序迁移我的应用程序UIPickerView.在viewDidLoad方法中,我创建了选择器,并将它的y原点设置self.view.frame.size.height为不在屏幕上.然后我会在需要时将其移动.

在iPhone 5 self.view.frame.size.height仍然返回480但UIView正确填充屏幕.

我甚至尝试过使用CGRectGetHeight(self.view.bounds)它可能会返回不同的东西......没有骰子.关于为什么会发生这种情况的任何想法.

hta*_*oya 22

这是因为在视图的笔尖中选择的大小将被使用直到viewWillAppear: (BOOL) animated方法.然后它将采取正确的大小.

但是,您可以使用以下代码来viewDidLoad调用正确的大小:

CGSize viewSize = [[UIScreen mainScreen] bounds].size;
viewSize = CGSizeMake(viewSize.width, viewSize.height - STATUS_BAR_HEIGHT);
Run Code Online (Sandbox Code Playgroud)

STATUS_BAR_HEIGHT是20但它取决于您的应用程序.您可能需要也可能不需要添加该行.

编辑

使用mainScreen边界的问题是框架在方向更改时不会改变.这就是它的设计方式.您可以使用以下方法解决此问题:

    CGSize viewSize = [[UIScreen mainScreen] bounds].size;

    if(UIInterfaceOrientationIsLandscape(CURRENT_ORIENTATION)){
        viewSize = CGSizeMake(viewSize.height, viewSize.width - STATUS_BAR_HEIGHT);

    } else {
        viewSize = CGSizeMake(viewSize.width, viewSize.height - STATUS_BAR_HEIGHT);
    }
Run Code Online (Sandbox Code Playgroud)

CURRENT_ORIENTATION[[UIApplication sharedApplication] statusBarOrientation];


asp*_*ame 18

我一直在处理同样的问题.我尝试获取视图框架- (void)viewDidLoad但发现它在- (void)viewWillAppear:(BOOL)animated被调用之前不会更新.

所以尝试获取视图框架- (void)viewWillAppear:(BOOL)animated,你应该没问题.

  • 这很棒!但是,我不想在每次出现时都不断更改视图.只需在加载视图后进行更改.嗯......我们可以找到一些其他快乐的中间地带(一种不同的方法,p'raps?). (2认同)