Xcode 8 - 一些视图和 VC 没有出现在模拟器上
Xcode 8 - Some Views & VCs Not Showing Up on Simulator
应用程序 运行 在更新到 Xcode 8 Beta 6 和 Swift 3 之前完美无缺。我没有改变其他任何东西,但现在我有两个问题。
首先,一些 运行dom 视图不再显示。它们只是方形的彩色盒子。不过上面的视图显示出来了。
在界面生成器中:
在模拟器上:
其次,我的模型 VC 在 segued 时不再出现。以前是这样,我可以看到正在调用 segue,但现在它不在那里了。
如果有人能提供关于这两个问题的想法,我们将不胜感激。
自动布局约束可能出了问题。仔细检查这些设置是否正确。
另外,您不需要使用模拟器来验证这一点;使用助理编辑器的预览视图:
作为健全性检查,我要做的第一件事是将您视图中的所有元素重置为建议的约束,看看是否能解决问题。
所以在 Xcode 7/Swift 2 --> Xcode 8/Swift 3 之间,改变了如何将 UIView 变成圆形。这是我的代码:
func roundView (_ viewToRound: UIView) {
viewToRound.layer.cornerRadius = 20
//viewToRound.layer.cornerRadius = (viewToRound.frame.width/2)
viewToRound.clipsToBounds = true
}
如您所见,我已将我的 cornerRadius 方法替换为明确的“20”,而不是从视图大小推断。在我之前的 "frame.width" 中,视图根本没有显示出来。现在他们恢复正常了。我不知道发生了什么变化,但这肯定解决了它。
肯定是AutoLayout的问题Xcode 8.不使用AutoLayout就不存在这个问题。我使用协议做了这个解决方法:
protocol Roundable {}
extension Roundable where Self: UIView{
func roundCorners(){
self.layer.cornerRadius = self.bounds.height / 2
}
}
class CustomView: UIView, Roundable {
override var bounds: CGRect {
didSet{
roundCorners()
}
}
}
使视图包含 CustomView,它将显示为圆形。我在这里使用了一个协议,因为这样可以很容易地扩展一个已经存在的 UIView 子类,使其具有圆角的功能。当然也可以直接在bounds属性观察者中设置cornerRadius。
iOS10 UIView lifecycle & AutoLayout 有问题。
我的意思是,在 viewDidLoad
和 viewWillAppear
等方法中,所有 UI 元素上的框架都是 `{{0,0},{1000,1000 }}.
在设置圆角等情况下,圆角为 500px 并且您会看到 UI 组件:)
我解决这个问题的方法是在 UIViewControllers
中的 viewDidLayoutSubview
或 UIView
子类中的 layoutSubviews
中设置圆角。
应用程序 运行 在更新到 Xcode 8 Beta 6 和 Swift 3 之前完美无缺。我没有改变其他任何东西,但现在我有两个问题。
首先,一些 运行dom 视图不再显示。它们只是方形的彩色盒子。不过上面的视图显示出来了。
在界面生成器中:
在模拟器上:
其次,我的模型 VC 在 segued 时不再出现。以前是这样,我可以看到正在调用 segue,但现在它不在那里了。
如果有人能提供关于这两个问题的想法,我们将不胜感激。
自动布局约束可能出了问题。仔细检查这些设置是否正确。
另外,您不需要使用模拟器来验证这一点;使用助理编辑器的预览视图:
作为健全性检查,我要做的第一件事是将您视图中的所有元素重置为建议的约束,看看是否能解决问题。
所以在 Xcode 7/Swift 2 --> Xcode 8/Swift 3 之间,改变了如何将 UIView 变成圆形。这是我的代码:
func roundView (_ viewToRound: UIView) {
viewToRound.layer.cornerRadius = 20
//viewToRound.layer.cornerRadius = (viewToRound.frame.width/2)
viewToRound.clipsToBounds = true
}
如您所见,我已将我的 cornerRadius 方法替换为明确的“20”,而不是从视图大小推断。在我之前的 "frame.width" 中,视图根本没有显示出来。现在他们恢复正常了。我不知道发生了什么变化,但这肯定解决了它。
肯定是AutoLayout的问题Xcode 8.不使用AutoLayout就不存在这个问题。我使用协议做了这个解决方法:
protocol Roundable {}
extension Roundable where Self: UIView{
func roundCorners(){
self.layer.cornerRadius = self.bounds.height / 2
}
}
class CustomView: UIView, Roundable {
override var bounds: CGRect {
didSet{
roundCorners()
}
}
}
使视图包含 CustomView,它将显示为圆形。我在这里使用了一个协议,因为这样可以很容易地扩展一个已经存在的 UIView 子类,使其具有圆角的功能。当然也可以直接在bounds属性观察者中设置cornerRadius。
iOS10 UIView lifecycle & AutoLayout 有问题。
我的意思是,在 viewDidLoad
和 viewWillAppear
等方法中,所有 UI 元素上的框架都是 `{{0,0},{1000,1000 }}.
在设置圆角等情况下,圆角为 500px 并且您会看到 UI 组件:)
我解决这个问题的方法是在 UIViewControllers
中的 viewDidLayoutSubview
或 UIView
子类中的 layoutSubviews
中设置圆角。