我有一个 iOS 应用程序。它工作得很好。
除非用户有热点或正在通话但通话应用已最小化
状态栏的扩展高度将我的 ui 向下推,使其一部分消失,
在底部。
我希望这个扩展栏覆盖在屏幕顶部,而不是将 ui 向下推。
我如何做到这一点?
Best Answer-推荐答案 strong>
最简单的解决方案是确保 View 的 springs-and-struts 或 Autolayout 属性允许 View 的压缩或扩展,如果您有一些复杂的 UI然后你可以实现 UIApplicationWillChangeStatusBarFrameNotification 观察者。
您可以处理 UIApplicationWillChangeStatusBarFrameNotification 和 UIApplicationDidChangeStatusBarOrientationNotification 通知,它们会告诉您状态栏的新大小。
如果您打算在 View 上使用变换来处理大小调整,则可以在 View Controller (可能在公共(public)基类中)实现 -viewWillLayoutSubviews 以在 View Controller 的 Root View 上设置变换。
-(void)viewDidAppearBOOL)animated
{
[super viewDidAppear:animated];
[[NSNotificationCenter defaultCenter] addObserver:self
selectorselector(statusFrameChanged
name:UIApplicationWillChangeStatusBarFrameNotification
object:nil];
}
-(void)viewDidDisappearBOOL)animated
{
[super viewDidDisappear:animated];
[[NSNotificationCenter defaultCenter] removeObserver:self
name:UIApplicationWillChangeStatusBarFrameNotification
object:nil];
}
- (void)statusFrameChangedNSNotification*)note
{
CGRect statusBarFrame = [note.userInfo[UIApplicationStatusBarFrameUserInfoKey] CGRectValue];
CGFloat statusHeight = statusBarFrame.size.height;
UIScreen *screen = [UIScreen mainScreen];
CGRect viewRect = screen.bounds;
viewRect.size.height -= statusHeight;
viewRect.origin.y = statusHeight;
self.view.frame = viewRect;
[self.view setNeedsLayout];
}
- (void)viewWillLayoutSubviews
{
[super viewWillLayoutSubviews];
CGRect baseFrame = self.view.frame;
// 548.0 is the full height of the view. Update as necessary.
CGFloat scale = self.view.frame.size.height / 548.0;
[self.view setTransform:CGAffineTransformMakeScale(1.0, scale)];
self.view.frame = baseFrame;
}
关于ios - 如何使 incall 覆盖不会将 ui 向下推,我们在Stack Overflow上找到一个类似的问题:
https://stackoverflow.com/questions/24871448/
|