我收到此错误.我不知道为什么要调用它,谷歌并没有真正帮助.有什么建议?
-[UIWindow endDisablingInterfaceAutorotation] called on <UIWindow: 0x4e0ec50; frame = (0 0; 320 480); opaque = NO; autoresize = RM+BM; layer = <CALayer: 0x4e0f9e0>> without matching -beginDisablingInterfaceAutorotation. Ignoring.
Run Code Online (Sandbox Code Playgroud) 我的目标是在iPhone应用程序顶部的状态栏上方绘制一个隐形按钮(尺寸为320*20像素).
无论我尝试什么,都会出现问题:
例如,我尝试创建一个新视图.当我想将视图放在我的应用程序顶部时,它总是消失在状态栏后面而不是在它前面!
我在Stackoverflow上找到了另一个好主意: 将UIView添加到所有其他视图之上,包括StatusBar 即使不推荐第二个UIWindow,我也尝试实现它.它直到我注意到一个问题时才按照我想要的方式工作:键盘在需要时不再出现(例如在文本框中单击时)!
我怎么可能解决这个问题?或者有更好的解决方法吗?这是我创建第二个窗口的代码:
// Create window
statusWindow = [[UIWindow alloc] initWithFrame:CGRectMake(0,0,320,20)];
statusWindow.windowLevel = UIWindowLevelStatusBar;
[statusWindow makeKeyAndVisible];
// Create statusBarButton
statusBarButton = [UIButton buttonWithType:UIButtonTypeCustom];
CGRect buttonFrame2 = statusBarButton.frame;
buttonFrame2.size = CGSizeMake(320,20);
statusBarButton.frame = buttonFrame2;
[statusBarButton addTarget:self action:@selector(goTop) forControlEvents:UIControlEventTouchUpInside];
// Place button into the new window
[statusWindow addSubview:statusBarButton];
Run Code Online (Sandbox Code Playgroud) 我加入UIView到UIWindow这不是keyWindow.我想UIView在设备旋转时旋转.窗口上的任何特殊属性或我需要设置的视图?目前视图不是旋转的.
我知道只有应用程序的第一个子视图keyWindow被告知有关设备轮换的事实.作为测试,我将我的观点添加到了第一个子视图中keyWindow.这会导致视图旋转.然而,作为keyWindow第一个子视图的子视图的视图将不适用于各种美学原因.
另一种方法是观察视图中的设备方向变化并自己编写旋转代码.但是,如果可能的话,我想避免编写此代码(在我看来,有一个额外的窗口更干净).
我总是看到对应用程序"窗口"的引用,我发现AppDelegates通常有一个UIWindow名为"window" 的属性.所以我只是想知道如何感知这个UIWindow对象.我看到它是它的子类UIView,所以我从技术上讲它是一个View是对的吗?那么说它就像整个应用程序的Superview一样安全吗?此外,何时以及为什么我可以参考它?它增加了什么价值?
我知道那里有很多问题,但只是一些整体背景UIWindow会很好.
当您使用单一视图模板启动应用程序,并NSLog(@"self.window = %@", self.window);在AppDelegate.m application: didFinishLaunchingWithOptions:方法的第一行添加时,您可以看到self.window应用程序中存在该应用程序.
但是,当您使用空模板启动应用程序并尝试将其记录self.window到控制台时,结果将返回null.即使您添加了故事板和视图控制器,并将其视图控制器设置为初始视图控制器,并尝试记录self.window,结果也是相同的 - 其值设置为null.
请注意,无论采用哪种方式,您都可以@property (strong, nonatomic) UIWindow *window;在AppDelegate.h中默认声明.所以我想知道为什么在第一种情况下,你可以看到它self.window被初始化并设置值但不是后一种情况.另外,如果self.window已经在第一种情况下声明并初始化但在第二种情况下不是,那么如何找到初始化代码?
它看起来像在这两种情况下,该@property声明是一样的-在这两种情况下,正如我所说,我试图登录的值self.window在第一线AppDelegate.m的application: didFinishLaunchingWithOptions:方法.
那么我错过了什么?我不知道为什么这两个案例的行为不同,尽管我没有在代码和故事板中发现任何差异.
我使用iOS 7和Xcode 5.谢谢.
我试图用我自己的视图覆盖状态栏并且这样做我通过做类似的事情(也在旋转之后)为我的视图计算框架:
UIScreen *screen = [UIScreen mainScreen];
CGRect statusBarFrame = [UIApplication sharedApplication].statusBarFrame;
Run Code Online (Sandbox Code Playgroud)
对于iOS8 +(因为UIScreenios8依赖于取向):
CGRect frame = [screen.coordinateSpace convertRect:statusBarFrame toCoordinateSpace:screen.fixedCoordinateSpace];
[self setFrame:frame];
Run Code Online (Sandbox Code Playgroud)
对于iOS7:
[self setFrame:statusBarFrame];
Run Code Online (Sandbox Code Playgroud)
它适用于iOS8及以下版本,但在使用Xcode 7 beta 4和iOS 9 SDK构建我的应用程序时,在横向或颠倒启动应用程序时出现问题(如果应用程序以纵向方式启动,则工作正常)...
即.当我在颠倒时启动应用程序时,应该覆盖状态栏的自定义uiwindow将始终位于屏幕的底部,任何想法可能出错?
如何在用户调整窗口大小时收到通知:
NotificationCenter.default.addObserver(self, selector: #selector(function), name: NSWindowDidResizeNotification, object: nil)
Run Code Online (Sandbox Code Playgroud)
在 Mac Catalyst 中不可用
嗨,您好,
我正在尝试使用UIScreen在iPad上使用VGA加密狗来驱动单独的屏幕.
这是我在根视图控制器的viewDidLoad中得到的:
//Code to detect if an external display is connected to the iPad.
NSLog(@"Number of screens: %d", [[UIScreen screens]count]);
//Now, if there's an external screen, we need to find its modes, itereate through them and find the highest one. Once we have that mode, break out, and set the UIWindow.
if([[UIScreen screens]count] > 1) //if there are more than 1 screens connected to the device
{
CGSize max;
UIScreenMode *maxScreenMode;
for(int i = 0; i < [[[[UIScreen screens] …Run Code Online (Sandbox Code Playgroud) 我已经看到一些iPad应用程序填满了屏幕(例如Stanza)或者已经在状态栏下方摆角(例如,iPod播放器的顶部有方角;底部无法分辨).有谁知道这是怎么做的?
看来,默认情况下,顶级UIWindow应用了剪裁区域,因为我放置在该窗口中的任何子视图都会在这些角落中被剪掉.如果是这样的话,有没有办法摆脱这个?顺便说一句,剪辑似乎只在iPad上,而不是在我的iPod Touch上(至少,不是我在那里运行的旧操作系统版本).
跟进:我甚至以编程方式创建了UIWindow,然后将其背景设置为纯色,圆角仍然存在,确认裁剪要么在UIWindow上,要么更高.
我正在尝试使用Xcode 11 beta 6和iOS 13 beta 8构建我的应用程序,但是一旦它开始运行,它将引发此错误:
由于未捕获的异常“ NSInternalInconsistencyException”而终止应用程序,原因:“在UIApplication上名为-statusBar或-statusBarWindow的应用程序:由于不再有状态栏或状态栏窗口,因此必须更改此代码。而是在窗口场景上使用statusBarManager对象。'
什么是窗口场景,如何使用statusBarManager?
而且我不确定这是否相关,但是我没有使用any SwiftUI。
uiwindow ×10
ios ×4
iphone ×3
objective-c ×3
ipad ×2
statusbar ×2
swift ×2
uikit ×2
uiview ×2
appdelegate ×1
clipping ×1
cocoa-touch ×1
ios13 ×1
ios9 ×1
keyboard ×1
mac-catalyst ×1
uiscreen ×1
uistatusbar ×1
vga ×1