- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在我的应用程序中,默认状态栏是可见的。我的应用程序支持横向和纵向。当我想播放视频时,我隐藏状态栏,以便我的视频全屏显示。当视频完成时,我将恢复状态栏。
我使用以下代码来显示视频:
UIWindow* window = [[UIApplication sharedApplication] keyWindow];
[window addSubview:playerView];
(我无法在代码中使用 View Controller 。这是一个限制)
现在的问题是:我的应用程序现在处于横向状态,单击按钮,我将隐藏状态栏并开始播放视频。播放视频时,我将手机方向更改为纵向,然后允许视频完成。视频完成后,设备仍处于纵向模式,播放器 View 将被删除,状态栏将再次显示。现在我注意到我的纵向 View 向上移动了 20 像素,超过了状态栏显示的位置。但是当我第一次启动该应用程序时,首先显示状态栏,在其下方显示我的 View 。
遇到这种情况我该如何处理?
简单地在 View Controller 中使用以下代码。
- (void)viewDidLoad {
[[UIApplication sharedApplication] setStatusBarHidden:YES];
[self performSelector:@selector(showStatusAgain) withObject:nil afterDelay:6.0];
[super viewDidLoad];
}
-(void)showStatusAgain
{
[[UIApplication sharedApplication] setStatusBarHidden:NO];
}
// Override to allow orientations other than the default portrait orientation.
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
return YES;
}
当您使用上述代码运行应用程序时,它将以纵向启动。现在将其旋转为横向。您可以注意到这个问题。
最佳答案
我遇到了类似的问题,我通过 UINavigationController 上的类别解决了这个问题。
UINavigationController+LayoutCorrecting.h:
@interface UINavigationController (LayoutCorrecting)
- (void)recalculateNavigationBarFrameRelativeToStatusBar;
@end
UINavigationController+LayoutCorrecting.m:
#import "UINavigationBar+LayoutCorrecting.h"
#import "UIViewAdditions.h"
@implementation UINavigationController (LayoutCorrecting)
- (void)recalculateNavigationBarFrameRelativeToStatusBar {
CGRect sbf = [[UIApplication sharedApplication] statusBarFrame];
if (UIInterfaceOrientationIsLandscape(self.interfaceOrientation))
self.navigationBar.top = sbf.size.width;
else
self.navigationBar.top = sbf.size.height;
}
@end
如果你通过在 UIViewController 上声明它来稍微调整这个类别,并确保它调整controller.view.frame而不是navigationBar.top,我想你会很高兴。只需确保在电影播放完毕并且已经显示状态栏后调用 View Controller 上的类别方法即可。
为了避免任何困惑,可能值得一提的是,您需要在横向模式下使用状态栏的宽度,因为 UIWindow 的坐标系统总是就像在纵向模式下一样工作,无论您如何握住设备。这与由 UIViewController 管理的 subview (UIView 实例)形成对比, subview 受益于自动坐标转换。
P.S.:由于您必须在窗口上下文中调整 View 的框架,因此此功能也可能有所帮助。
CGRect CGRectOffsetRectForOrientation(CGRect rect, CGFloat dx, CGFloat dy, UIInterfaceOrientation orientation) {
CGRect newRect = rect;
switch (orientation) {
case UIInterfaceOrientationPortrait:
newRect.origin.x += dx;
newRect.origin.y += dy;
break;
case UIInterfaceOrientationPortraitUpsideDown:
newRect.origin.x -= dx;
newRect.origin.y -= dy;
break;
case UIInterfaceOrientationLandscapeLeft:
newRect.origin.y -= dx;
newRect.origin.x += dy;
break;
case UIInterfaceOrientationLandscapeRight:
newRect.origin.y += dx;
newRect.origin.x -= dy;
break;
default:
break;
}
return newRect;
}
关于iPhone - 全屏和状态栏的典型问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5335586/
有什么方法可以使用常用工具(ffmpeg?mplayer/mencoder?mkvmerge?等)来查找关键帧在给定视频文件中出现的频率? {从而找到最小搜索大小?}这似乎是一个显而易见的统计数据,“
关闭。这个问题是opinion-based .它目前不接受答案。 想要改进这个问题? 更新问题,以便 editing this post 可以用事实和引用来回答它. 关闭 2 年前。 Improve
我正在阅读Intel的SSD产品specification。那里有一张桌子说 Latency (typical) read/write < 10 us 但是没有更多细节可以解释这个数字。有人知道“典型
出于好奇:典型的 Linux 发行版中最古老的代码/包是什么?电子书?海湾合作委员会? 最佳答案 Sun RPC 很老了,它在 C 库中: http://blogs.oracle.com/webmin
一个常见的假设是 1/x * x == 1。在符合 IEEE 754 标准的常见硬件上打破这个的最小正整数是多少? 当乘法逆的假设失败时,写得不好的有理算术就会停止工作。由于包括 C 和 C++ 在内
流行手机型号支持的典型触摸点数量是多少?我在基础研究中看到低至 2 和高至 5,但我希望能够将其映射到实际手机和更好的限制! 最佳答案 两部手机的触控点数据: Galaxy S 5 LG
我讨厌讨厌IE!既然我已经咆哮了,我确实需要一些帮助。我这里有这个网站。 http://pearsonlyle.uwpistol.net/galleries/susie-theodorou/edito
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visit the help center . 关闭 1
作为来自企业 IT 的 Node.js 初学者,我无法理解 Node.js 用法的某一方面。我将我的问题分为两部分。 问题 1) 严格从可扩展性的角度来看,I/O 密集型 Web 应用程序如何使用 N
我希望我的问题是合法的......我问这个问题是因为在阅读了许多博客,玩了许多示例应用程序和官方 API 1 周后,我仍然很困惑,从哪里开始编码...... 总的来说,就浏览器之间的系统架构而言 W
这是我的汽车类(class): public class Car { private int FGNr; private String name; private String type; priva
我认为我的问题标题清楚地表达了我需要的信息的本质。我用谷歌搜索了 where is the "applies to list" in vba excel以及其中的一些变体,都带有如图所示的引号,这应该
我是一名优秀的程序员,十分优秀!