【发布时间】:2015-09-07 18:14:43
【问题描述】:
我有一个UIImageViews 的网格。布局在 5S 上看起来不错,但在 6 或 6+ 上,网格位于左上角。我决定尝试测试屏幕尺寸,这在this 问题中进行了解释(测试有效);然后根据屏幕尺寸,按照this 帖子中的建议,使用CGRectMake 重新定位UIImageViews。代码如下:
if UIDevice().userInterfaceIdiom == .Phone {
switch UIScreen.mainScreen().nativeBounds.height {
case 480:
println("iPhone Classic")
case 960:
println("iPhone 4 or 4S")
case 1136:
println("Default Setup")
println("iPhone 5 or 5S or 5C")
case 1334:
dieImage0.frame = CGRectMake(42, 61, 152, 152)
dieImage1.frame = CGRectMake(247, 61, 152, 152)
dieImage2.frame = CGRectMake(42, 218, 152, 152)
dieImage3.frame = CGRectMake(247, 218, 152, 152)
dieImage4.frame = CGRectMake(42, 376, 152, 152)
dieImage5.frame = CGRectMake(247, 376, 152, 152)
dieImage6.frame = CGRectMake(42, 533, 152, 152)
dieImage7.frame = CGRectMake(247, 533, 152, 152)
println("iPhone 6")
case 2208:
dieImage0.frame = CGRectMake(141, 201, 228, 228)
dieImage1.frame = CGRectMake(819, 201, 228, 228)
dieImage2.frame = CGRectMake(141, 723, 228, 228)
dieImage3.frame = CGRectMake(819, 723, 228, 228)
dieImage4.frame = CGRectMake(141, 1242, 228, 228)
dieImage5.frame = CGRectMake(819, 1242, 228, 228)
dieImage6.frame = CGRectMake(141, 1764, 228, 228)
dieImage7.frame = CGRectMake(819, 1764, 228, 228)
println("iPhone 6+")
default:
println("unknown")
}
}
我知道测试有效,因为提示手机型号打印正确的消息,但图像的位置没有改变。然后当我触发 segue 去第二个视图控制器时
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "showMenu" {
println("You pressed the menu button")
}
错误“致命错误:在展开可选值时意外发现 nil”被打印到控制台,并且在为我正在测试的设备更改图像位置的情况下,第一行会引发此错误:@987654328 @。任何想法为什么会发生这种情况?
【问题讨论】:
-
(1) 您可能希望将
UICollectionView或自动布局约束视为解决此问题的更简单、更优雅的解决方案。 (2) 你知道“在展开可选值时意外发现 nil”是什么意思吗?您是否阅读过有关此主题的相关问题? -
你在代码的什么地方执行它?此外,这不是制作这样一个网格的好解决方案。正如@AaronBrager 所说,使用自动布局和 UICollectionView。
-
UICollectionView 一路。这是你在那里所做的非常糟糕的代码。
标签: ios iphone swift uiimageview runtime-error