除非在情节提要中设置设备,否则视图无法正确缩放(视图为:iphone 5s/8/etc)
Views not scaling correctly unless the device is set in the storyboard (view as: iphone 5s/8/etc)
用截图描述最简单(我说的"view as"在每张图片的右下角):
模拟器:iPhone 8,故事板视图为:iPhone 8 - 完美运行
模拟器:iPhone 8 加,故事板视图为:iPhone 8 - 不工作
模拟器:iPhone 8 plus,故事板视图为:iPhone 8 plus - 完美运行
应该正常工作的代码示例,当情节提要设置为该模型时可以正常工作phone,但在其他情况下不能正常工作:
gradientLayer.frame = CGRect(x: 0, y:0, width: self.view.bounds.width, height: self.view.bounds.height)
gradientLayer.colors = [Colors().bgRed.cgColor, Colors().mediumBlue.cgColor, Colors().highlitMedBlue.cgColor]
gradientLayer.startPoint = CGPoint(x: 0.1, y: 0.1)
gradientLayer.endPoint = CGPoint(x: 1, y: 1)
self.view.layer.addSublayer(gradientLayer)
其他失败的例子是当我使用 view.convert(viewX, to: viewY) 时,它 works/fails 在与上述图片相同的情况下。
这是怎么回事?难道只是模拟器出错了?我是否错误地使用了自动版式?如果我在实际 phone 上而不是在模拟器上尝试,它会起作用吗?
你可以试试把框线放在里面viewDidLayoutSubviews
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
gradientLayer.frame = self.view.bounds
}
它非常适用于与故事板具有相同设置的模拟器,因为它的视图大小被考虑用于渲染,直到 viewDidLayoutSubviews
具有当前 simulator/device
的正确大小
您设置的框架不正确。
宽度和高度应来自 self.view.frame
尝试使用
gradientLayer.frame = CGRect(x: 0, y:0, width: self.view.frame.width, height: self.view.frame.height)
如果您想使用 self.view.bounds,
然后尝试
gradientLayer.frame = self.view.bounds
让我知道它是否有效。
用截图描述最简单(我说的"view as"在每张图片的右下角):
模拟器:iPhone 8,故事板视图为:iPhone 8 - 完美运行
模拟器:iPhone 8 加,故事板视图为:iPhone 8 - 不工作
模拟器:iPhone 8 plus,故事板视图为:iPhone 8 plus - 完美运行
应该正常工作的代码示例,当情节提要设置为该模型时可以正常工作phone,但在其他情况下不能正常工作:
gradientLayer.frame = CGRect(x: 0, y:0, width: self.view.bounds.width, height: self.view.bounds.height)
gradientLayer.colors = [Colors().bgRed.cgColor, Colors().mediumBlue.cgColor, Colors().highlitMedBlue.cgColor]
gradientLayer.startPoint = CGPoint(x: 0.1, y: 0.1)
gradientLayer.endPoint = CGPoint(x: 1, y: 1)
self.view.layer.addSublayer(gradientLayer)
其他失败的例子是当我使用 view.convert(viewX, to: viewY) 时,它 works/fails 在与上述图片相同的情况下。
这是怎么回事?难道只是模拟器出错了?我是否错误地使用了自动版式?如果我在实际 phone 上而不是在模拟器上尝试,它会起作用吗?
你可以试试把框线放在里面viewDidLayoutSubviews
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
gradientLayer.frame = self.view.bounds
}
它非常适用于与故事板具有相同设置的模拟器,因为它的视图大小被考虑用于渲染,直到 viewDidLayoutSubviews
具有当前 simulator/device
您设置的框架不正确。 宽度和高度应来自 self.view.frame
尝试使用
gradientLayer.frame = CGRect(x: 0, y:0, width: self.view.frame.width, height: self.view.frame.height)
如果您想使用 self.view.bounds,
然后尝试
gradientLayer.frame = self.view.bounds
让我知道它是否有效。