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,你应该没问题.