我正在使用Xcode 8.1, 故事板文件运行良好,但每当我打开XIB文件时,Xcode都会糟透了并开始挂起。 请告诉我,这个有问题的Xcode有什么问题。
或者我应该寻找其他替代方案吗?
由于
答案 0 :(得分:2)
我有一个3.4 GHz Intel Core i7,配备32 GB 1600 MHz DDR3,2 GB GTX 680MX和Xcode。我承认,我并不总是看到编辑.xib和.storyboard之间的区别,但Interface Builder似乎是一个“坏公民”#34;当谈到资源时。因此,我已经改变了我的工作流程,以避免那些沮丧的时刻并完成工作。
<强> 1。如果可能,请避免使用IBDesignable。
如果他们确实正常工作/加载,他们最多只是通过运行您的应用程序向您展示您可以看到的内容。如果我是自定义控件/视图的原型,我将使用带有PlaygroundSupport和liveView的游乐场。请注意,我并不是说IBInspectable不好。我一直都在使用它。
<强> 2。使用Xcode&#34;编辑器&gt;重构故事板&#34;作为xib和大型故事板的替代品。
有一件事似乎对我有帮助,就是像使用xibs一样使用小故事板。虽然有可能,但我并不是每个视图控制器严格意味着一个故事板。更多应用程序中每个进程的一个故事板。例如,我通常给一个注册过程自己的 signup.storyboard ,它只包含与注册相关的场景。这样做的优点是可以捆绑多个场景并保留使用segue的能力,同时又像xib一样灵活,只需更改您加载的故事板文件,即可在UI版本之间切换。
代码示例
例如,在注册过程故事板的初始视图控制器中,我将创建以下内容:
public class func instantiateFromStoryboard() -> SignupViewController {
let storyboardName = "Signup"
let storyboard = UIStoryboard(name: storyboardName, bundle: nil)
let storyboardIdentifier = "SignupViewController"
let signupVC = storyboard.instantiateViewController(withIdentifier: storyboardIdentifier) as! SignupViewController
return signupVC
}
更新: 我创建了一个简单的UIViewController扩展,它实际上是上面代码的通用版本。有关详细信息,请参阅自述文件https://github.com/kyleishie/InitFromStoryboard
仅限故事板示例
这可以在没有代码的情况下完成,只使用故事板以及使用跨故事板segue。在编辑故事板时,在对象库中有一个名为 Storyboard Reference 的对象。拖出一个并将其 Storyboard 属性设置为目标故事板。您现在可以按照预期的方式创建到目的地的segues。如果需要,您可以通过输入 storyboardIdentifier 作为参考ID 来指定特定场景。默认情况下,它使用storyboard的initialViewController。
使用此方法或类似方法,您可以轻松地通过
交换整个注册过程UI•使用适当的场景创建新的故事板。
•将现有课程分配给新场景并连接所有插座和操作。
•更改故事板参考对象中与此流程相关的initialViewController或 storyboard 属性中的 storyboardName 。
Ray Weinerlich has a good tutorial on using storyboards with iOS9+.
我意识到这个工作流程可能不是您要求的,但如果故事板运行良好但xibs不是,那么它可能对您的特定问题有所帮助。 ;)
答案 1 :(得分:0)
如果您使用的是低配置mac机器,那么肯定会挂起。如果您正在寻找替代方案,那么您应该寻找Xamarin,但您需要了解C#。