Xcode:这是Xcode错误还是AutoLayout / Storyboard问题?

问题描述 投票:0回答:2

最简短的问题: Xcode的情节提要中的“查看方式”功能与您的应用程序在模拟器中的外观显示方式之间是否相关?


长问:我正在使用Schedule应用程序,该应用程序在ViewController的顶部有一个CollectionView,可让您选择日期以加载计划,例如,您可以选择明天进行计划,今天可以选择,昨天或过去或将来的日子。

在我的项目中,我已使用此代码来选择当前日期。

override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(true)

        dateCollectionView.selectItem(at: IndexPath.init(item: CalendarModel.CURRENT_DAY, section: 0), animated: true, scrollPosition: .centeredHorizontally)
}

现在,当我运行项目时,发生了奇怪的事情。如果在这样的情节提要中选择iPhone 11作为“查看方式”:

enter image description here

然后运行iPhone 11 Simulator,我的App运行正常,看起来像这样:enter image description here

现在,如果我这样在情节提要中选择iPhone SE:

enter image description here

然后在iPhone 11上运行该应用程序,它看起来像这样(不起作用,不显示“ Today”:):

enter image description here

现在发生了奇怪的事情,如果我现在选择iPhone 8,它与iPhone SE的尺寸相同,而仍在情节提要中选择了iPhone SE。如您所见,它现在可以工作:

enter image description here

[如果我还在“查看方式”部分中选择了iPhone SE,并尝试在物理iPhone XS上运行它,则会遇到相同的问题。

所以我的问题是,这是Xcode错误吗?假设我假设在Appstore上发布了该应用程序,它仅在某些设备上可以使用吗?有办法防止这种情况吗?

[我在GitHub上发布了一个最小的可复制示例:

github.com/julianboyko/Power-Planner-MRE

我几乎可以确定这是一个Storyboard问题,与我必须使用的StackView和使用的约束有关。

谢谢。

ios swift xcode autolayout storyboard
2个回答
0
投票

您是否尝试过使用cmd + shift + k清理构建?它可能什么也不会做,但是尝试时不会受到伤害。同样在第二张屏幕截图中,它的位置不是相等,而是通过编程将其设置为居中,是否检查了所有约束(并且又不知道为什么这样做会改变显示的样式但值得一试)。


0
投票

模拟器中的各种设备都有各自的状态。您的应用可能安装在某些应用上,而不是安装在其他应用上,并且其安装在每个设备上的应用状态都特定于该设备。

看起来您的应用默认默认显示当前日期,但是它还会保存所选日期,并在下次运行时使用该日期。无论如何,这都是相当合理的行为,因此,为了争辩,我们可以说是这样做的。如果上周在iPhone 11模拟器上运行了您的应用程序,那么您的应用程序可能会将当天保存为所选日期。当您最近在未安装该设备的其他设备上再次运行该应用程序时,该应用程序“全新”启动并选择了当前日期。但是,当您在iPhone 11上运行该应用程序时,该应用程序已经保存了一些数据,因此它使用了该数据,而不是使用默认行为。

请注意,即使您重新构建了该应用程序并将其再次安装在iPhone 11模拟器上,也是如此。重建应用程序时,Xcode会安装新的应用程序,但会将应用程序的现有数据保留在原位,就像从App Store更新应用程序一样。如果您希望应用程序像新安装的一样启动,只需在构建之前将其从模拟器中删除即可。

© www.soinside.com 2019 - 2024. All rights reserved.