[UIScreen mainScreen].bounds 即使iPad处于横向模式,也会返回(0,0,768,1024).
它应返回(0,0,1024,768)但返回(0,0,768,1024).
可能有什么不对?
我[UIScreen screens]在iOS 5.0.1中看到奇怪的行为,我们在崩溃时登录Flurry.有时[UIScreen screens]会返回一个空数组.我们的应用程序通过EAAccessory框架实现对外部附件的支持.这种行为是完全出乎意料的,因为即使Apple的文档说从该方法返回的数组总是包含至少一个条目.
我正在开发我目前的iPhone音频应用程序以支持CarPlay.我已经获得Apple的批准并获得了开发权利,并观看了视频"为CarPlay启用应用程序"(https://developer.apple.com/videos/play/wwdc2017/719/).在视频中有一段Swift代码演示了如何添加CarPlay UI:
func updateCarWindow()
{
guard let screen = UIScreen.screens.first(where:
{ $0.traitCollection.userInterfaceIdiom == .carPlay })
else
{
// CarPlay is not connected
self.carWindow = nil;
return
}
// CarPlay is connected
let carWindow = UIWindow(frame: screen.bounds)
carWindow.screen = screen
carWindow.makeKeyAndVisible()
carWindow.rootViewController = CarViewController(nibName: nil, bundle: nil)
self.carWindow = carWindow
}
Run Code Online (Sandbox Code Playgroud)
我将它重新编写为Objective-C版本,如下所示:
- (void) updateCarWindow
{
NSArray *screenArray = [UIScreen screens];
for (UIScreen *screen in screenArray)
{
if (screen.traitCollection.userInterfaceIdiom == UIUserInterfaceIdiomCarPlay) // CarPlay is connected.
{
// Get the …Run Code Online (Sandbox Code Playgroud) 可能重复:
如何为iPhone 5屏幕分辨率开发或迁移应用程序?
如何处理iPhone 5的屏幕尺寸?
要检查什么才能支持iPhone 5更长的屏幕?
借助iPhone 5上的新屏幕尺寸,任何人都知道或猜测[[UIScreen mainScreen] bounds].size.height在iPhone 5上运行的应用程序会返回什么内容?在所有其他iPhone,包括Retina,它返回480- 我认为它现在将返回568?
或者,它是否会以"居中,letterboxed"模式运行,除非在应用程序中进行其他配置以"允许"完整的iPhone 5分辨率?
在iOS 5.1.1中,我发现如果我创建了我的UIWindow(我厌倦了IB),并将其框架设置为[UIScreen mainScreen] .bounds,则窗口会显示在状态栏下.但是如果我做同样的事情是iOS 6,它会出现在状态栏正下方的正确位置.
CGRect r = [[UIScreen mainScreen] bounds];
self.window = [[UIWindow alloc] initWithFrame: r];
self.detailViewController = [[DetailViewController alloc] init];
self.window.rootViewController = self.detailViewController;
[self.window addSubview: detailViewController.view];
[self.window makeKeyAndVisible];
Run Code Online (Sandbox Code Playgroud)
但是,如果我插入r.origin.y + = 20,要将窗口移动到iOS 5.1.1中的状态栏下方,这并不能解决问题,事情只会变得更奇怪.
在以编程方式创建UIWindow时,在UI中放置UIWindow的正确方法是什么?谢谢.
问题是,我的阅读应用程序有一个按钮,使其进入黑暗的主题模式.亮度降低了10%.当用户返回正常模式时,它将被设置回记忆的亮度.但与此同时,实际系统亮度可能会因自动亮度调整而改变,甚至用户也可以转到"设置"并在那里进行更改.
亮度属性的问题在于,您只查询实际的屏幕亮度,而您设置的任何内容只是暂时的,直到用户锁定屏幕.解锁后系统恢复系统亮度.
如果iOS会在系统更改有用的亮度时发送通知.在文档中找不到任何相关内容.
我的iOS应用程序有一个锁定屏幕,启用后会覆盖整个屏幕UIScreen.但是,在UIScreen界限之外,我的窗格中包含锁定屏幕未覆盖的敏感信息.(当屏幕解锁时,可以刷入和滑出这些窗格.)
如何获得超出UIScreen界限的信息有多安全?攻击者可以使用某种外部显示器,调试器或其他一些机制来"揭示" UIScreen屏幕外的内容吗?
[锁定屏幕WKWebView默认具有"放大镜"功能.我发现,当在边缘处触发时UIScreen,放大镜显示UIScreen边缘后面的几个像素.我已经用这个答案禁用了放大镜.]
我认为我想覆盖整个屏幕.我想将其框架设置为覆盖整个屏幕.浏览堆栈溢出我发现这两种不同的方式来设置视图框以覆盖屏幕:
[UIScreen mainScreen].bounds
[UIApplcation sharedApplication].keyWindow.bounds
Run Code Online (Sandbox Code Playgroud)
在我看来,他们总是返回相同的值,或者至少在我尝试的几个测试用例中.
目前我正在使用UIScreen,但我很想知道这些电话之间的区别?是否会出现一些他们会返回不同价值的情况?
iOS 11具有新功能,使用户能够记录他们的屏幕,我想在我的应用程序保持屏幕记录启用时播放视频时仅禁用视频录制.
例如.我正在录制我的屏幕并打开我的应用程序开始使用它,但是一旦AVPlayer开始播放视频,它应该暂停屏幕录制,以便我的应用程序中的视频不会在录制中捕获,而音频可以在屏幕录制中捕获.
谢谢!
我必须检查我的设备是否在 iOS 8+ 中改变了方向。
我的做法是:
override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {
super.viewWillTransition(to: size, with: coordinator)
let isLand = UIScreen.main.bounds.width > UIScreen.main.bounds.height
coordinator.animate(alongsideTransition: nil) { _ in
let isLand2 = UIScreen.main.bounds.width > UIScreen.main.bounds.height
print("\(isLand) -> \(isLand2)")
}
}
Run Code Online (Sandbox Code Playgroud)
它在 iPhone 中运行良好,但在 iPad 中isLand已经有了新的值,应该是在定位完成后,所以:
人像 > 风景: true -> true
风景 > 人像: false -> false
根据文档,边界应该随着方向而改变,所以它应该有一个之前/之后的边界,不是吗?
UIScreen 主要边界:
这个矩形是在当前坐标空间中指定的,它考虑了对设备有效的任何界面旋转。因此,当设备在纵向和横向之间旋转时,此属性的值可能会发生变化。
如果我像这样使用当前根视图控制器的边界,它在 iPhone 和 iPad 上都可以正常工作:
override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {
super.viewWillTransition(to: size, with: …Run Code Online (Sandbox Code Playgroud) uiscreen ×10
ios ×6
ipad ×3
iphone ×3
objective-c ×3
bounds ×2
brightness ×1
carplay ×1
cgrect ×1
eaaccessory ×1
ios11 ×1
ios5 ×1
ios6 ×1
lockscreen ×1
security ×1
swift ×1
swift4 ×1
uikit ×1
uiwindow ×1
wkwebview ×1