在iOS 13中按下UIViewController会使其与状态栏重叠
请注意,此项目是在Xcode 10中创建的。我最近升级到了Xcode 11,这就发生了。 我有一个UINavigationController,它可以推送视图控制器。 初始视图控制器看起来正常。但当我通过按下另一个视图控制器切换到另一个视图控制器时,第二个视图控制器与状态栏重叠。这只发生在iOS 13中。 我在模拟器上测试。使用Xcode 11 导航栏的可见性被隐藏 将演示文稿设置为全屏或当前上下文具有相同的结果。它似乎超出了安全区域,但我将其设置为低于安全区域 我使用以下方式进行转换:在iOS 13中按下UIViewController会使其与状态栏重叠,ios,swift,iphone,xcode,ios13,Ios,Swift,Iphone,Xcode,Ios13,请注意,此项目是在Xcode 10中创建的。我最近升级到了Xcode 11,这就发生了。 我有一个UINavigationController,它可以推送视图控制器。 初始视图控制器看起来正常。但当我通过按下另一个视图控制器切换到另一个视图控制器时,第二个视图控制器与状态栏重叠。这只发生在iOS 13中。 我在模拟器上测试。使用Xcode 11 导航栏的可见性被隐藏 将演示文稿设置为全屏或当前上下文具有相同的结果。它似乎超出了安全区域,但我将其设置为低于安全区域 我使用以下方式进行转换: sel
self.navigationController?.performsgue(带有标识符:“MyAlertssgue”,发送方:self)
这个项目是在Xcode 10中创建的。我在更新到Xcode 11后遇到了这个问题。
如果我在Xcode 11中创建一个新项目,似乎没有问题。我猜,我有一个迁移问题
以下是一些屏幕截图:
初始视图控制器:
视图控制器2:
情节提要设置:
Segue属性检查器:
视图控制器2属性检查器
更新
我所做的变通方法是将每个视图控制器嵌入到导航控制器中。它解决了这个问题,但过渡并不顺利,因为我无法推动导航控制器。我必须把它们呈现出来。我不知道为什么这会发生在iOS 13上
更新
我自己找到了答案。看看下面是否对你有帮助。我找到了我自己问题的答案。 我尝试在Xcode 11中创建一个新项目,以查看与在Xcode 10中创建的项目相比的差异。 这些差异与仅在iOS 13中可用的UISceneSession有关。 我希望这个答案能帮助所有和我有同样问题的人 以下是区别:
AppDelegate.swift中的UI会话生命周期 UISceneSession有几种方法。将这些行添加到
中AppDelegate.swift
//标记:UISceneSession生命周期
@可用(iOS 13.0,*)
func应用程序(uApplication:UIApplication,用于连接的配置SceneSession:UISceneSession,选项:UIScene.ConnectionOptions)->UISceneConfiguration{
//在创建新场景会话时调用。
//使用此方法可以选择配置以创建新场景。
返回UISceneConfiguration(名称:“默认配置”,会话角色:ConnectionSceneSession.role)
}
@可用(iOS 13.0,*)
func应用程序(application:UIApplication,didDiscardSceneSessions sceneSessions:Set){
//当用户放弃场景会话时调用。
//如果在应用程序未运行时丢弃了任何会话,则将在application:didFinishLaunchingWithOptions后不久调用该会话。
//使用此方法释放特定于被丢弃场景的任何资源,因为它们不会返回。
}
- 斯威夫特美术馆
导入UIKit
@可用(iOS 13.0,*)
类SceneDelegate:UIResponder,UIWindowSceneDelegate{
变量窗口:UIWindow?
func场景(场景:UIScene,willConnectTo会话:UISceneSession,选项connectionOptions:UIScene.connectionOptions){
//使用此方法可以选择性地配置UIWindow`window`并将其附加到提供的UIWindowScene`scene`。
//如果使用情节提要,“窗口”属性将自动初始化并附加到场景。
//此委托并不意味着连接的场景或会话是新的(请参见'application:ConfigurationForConnectionSceneSession'。
guard let=(场景为?UIWindowScene)else{return}
}
func sceneDidDisconnect(场景:UIScene){
//调用,因为系统正在释放场景。
//这会在场景进入背景后不久发生,或者在其会话被放弃时发生。
//释放与此场景关联的所有资源,这些资源可以在下次场景连接时重新创建。
//场景稍后可能会重新连接,因为它的会话没有必要被丢弃(请参见“应用程序:DidDiscardScenessessions”)。
}
func sceneDidBecomeActive(u场景:UIScene){
//当场景从非活动状态移动到活动状态时调用。
//使用此方法可重新启动场景处于非活动状态时暂停(或尚未启动)的所有任务。
}
func sceneWillResignActive(u场景:UIScene){
//当场景从活动状态移动到非活动状态时调用。
//这可能是由于临时中断(如来电)造成的。
}
func scenewillenterforment(u场景:UIScene){
//当场景从背景过渡到前景时调用。
//使用此方法可以撤消在进入背景时所做的更改。
}
func sceneDidEnterBackground(u场景:UIScene){
//当场景从前景过渡到背景时调用。
//使用此方法可以保存数据、释放共享资源并存储足够的场景特定状态信息
//将场景恢复到其当前状态。
}
}
- 最后,将其添加到Info.plist
UIApplicationSceneManifest
UISCeneConfiguration
UIWindowsCensessionRole应用程序
UISceneClassName
UISCenedLegateClassName
$(产品\u模块\u名称).SceneDelegate
UISCeneConfiguration名称
默认配置
UISCenestryBoardFile
主要
<key>UIApplicationSceneManifest</key>
<dict>
<key>UISceneConfigurations</key>
<dict>
<key>UIWindowSceneSessionRoleApplication</key>
<array>
<dict>
<key>UISceneClassName</key>
<string></string>
<key>UISceneDelegateClassName</key>
<string>$(PRODUCT_MODULE_NAME).SceneDelegate</string>
<key>UISceneConfigurationName</key>
<string>Default Configuration</string>
<key>UISceneStoryboardFile</key>
<string>Main</string>
</dict>
</array>
</dict>
<key>UIApplicationSupportsMultipleScenes</key>
<false/>
</dict>