我正在用一块砖块制作突破游戏(斯坦福CS193p)。每块砖的宽度都是let width = frame.size.width / CGFloat(bricksPerRow)
,一切正常,但只有当Interface Builder设置为与模拟器相同的设备时!如果它们不同,用于计算宽度的帧始终是我在IB中选择的设备的大小,而不是在模拟器中运行的设备的大小。
例如,如果我让Interface Builder显示iPhone 7,但我在iPhone SE上运行模拟器,那么这些块对于屏幕来说太大了。我知道在IB和模拟器上使用不同的设备并不是一个很好的理由,但是当我第一次运行应用程序时,在这些条件下偶然/偶然,并且,你知道,不应该自动布局框架是设备的大小?
这是砖块尺寸的代码,有一些打印用于调试。打印输出确认无论我运行什么设备,框架都是相同的。同样,对于它使用的帧,一切都被正确绘制,它只是使用错误的帧。
var brickSize: CGSize {
print(frame.size)
let width = frame.size.width / CGFloat(bricksPerRow)
let height = width * 2/3
print("Calculated width: \(frame.size.width / CGFloat(bricksPerRow))")
print("'Actual' width: \(width)")
return CGSize(width: width, height: height)
}
这是在我的视图的代码中,在故事板中,视图的约束似乎设置正确(尾随并引导到superview)。