Ste*_*eve 70 xcode interface-builder storyboard xib ios
使用Storyboard和xib文件有什么主要区别.
具体来说,使用故事板有什么优缺点?
遗憾的是,尽管进行了大量的研究,我在故事板上找到的所有内容都是简单的教程,向您展示如何设置故事板,而不是具体的信息来解释它们是什么.
LJ *_*son 83
故事板是:
我一直在使用Storyboard一段时间,唯一的缺点是你不能以iOS 4或更低版本为目标.故事板仅适用于运行iOS 5或更高版本的设备.除此之外,其好处很多,而且缺点是IMO不存在.
我见过的最好的教程是Ray Wenderlich
此外,如果您是Apple Developer计划的成员,请查看故事板(iTunesU)上去年的WWDC会议,这非常棒.
另一个伟大的(也在iTunesU上)是最新的斯坦福iOS应用程序编程课程.
bra*_*ray 52
不仅有故事板的专业方面,也有缺点 - 只是因为你要求输入:
- 以下情况并非如此: - 如果你需要做SB没有提供的东西,那么将SB与编程创建的视图混合起来并不容易(嗯,虽然有可能)
经验法则似乎是:你期望你的项目越复杂,你就越不会选择SB.
编辑: - SB的另一个缺点:解决所有关于SB的XCode烦人的错误.例如,由于几个不一致而不得不频繁刷新DerivedData文件夹.有时故事板文件或其链接已损坏.那么你可能会很高兴找到问题所在.看一下这个帖子就可以了解这个想法
编辑2(2013年3月):同时Storyboards和Xcode工作得更好,文档和最佳实践广泛传播.我认为,对于大多数项目,可以推荐使用故事板,即使仍然存在一些问题.
编辑3(2013年9月):现在使用新的Xcode 5格式与SB合作可能会变得更好,因为现在似乎可以更容易地合并SB代码.
另一个编辑:好吧,如果你有一个小时的时间,请坐下来,放松一下,听听这些人讨论这个话题(Ray Wenderlich&Co)
编辑2016.1:经过很长一段时间成为故事板的倡导者,我在过去的几个月里一直很麻烦,我决定尽可能地放弃故事板.原因是Apple增加了像傻瓜这样的功能,但并不关心错误和缺陷.具有大量自动布局约束的性能非常糟糕(设计时),并且容易出错的情况变得非常严重.示例:即使不那么复杂在Xcode中打开项目后,故事板也会立即进入"脏模式"(请参阅git状态).提示:作为初学者,您会喜欢Storyboard,因为您可以快速创建原型并在没有大量代码的情况下运行.当您进入中间状态时,您将为项目添加更多GUI代码.现在你开始在代码和SB之间来回 - 事情开始变得更糟.迟早你会倾向于在代码中执行大部分GUI工作,因为结果比拥有多个源更容易预测.
笔尖/的.xib文件和故事都是被用来直观地创建用于在Xcode iOS和Mac应用程序的用户界面(我将使用的iOS术语的类作为这个问题是标签的iOS,但它也适用于Mac编程)接口生成器文件.
笔尖旨在与单个一起使用UIView.它们也可以通过将UIViewControllerFile的所有者类设置为UIViewController视图插座的任何子类并连接到子类来连接到子类(使用Xcode最右侧窗格中的Connections Inspector进行拖动连接).
故事板旨在包含1个或更多的用户界面UIViewController.您可以在单个故事板中构建整个用户界面,也可以将其分成较小的部分.
应始终使用故事板来支持.xib文件/ Nib(对于视图控制器).故事板具有更多功能,并由Apple积极开发.
支持Nibs的每个论据都依赖于他们单独使用的事实,而故事板包含许多场景.您可以使用UIViewControllerNibs尽可能轻松地使用单个故事板(请参阅下面的代码示例).请继续阅读详细说明和代码示例.
为什么Storboards优于Nibs?
答案基本上归结为Apple鼓励使用Storyboard并将更多的开发工作投入其中.
对故事板的基本论点是,将所有视图控制器放在一个地方会导致合并冲突,缓慢的Xcode,缓慢的构建时间以及维护对接的一般痛苦.因此,一般建议是为每个使用一个笔尖UIViewController.
但是......你可以为每个人创建故事板UIViewController.一个常见的做法(至少对我来说)是在类方法中隐藏所有UIViewController初始化(因为没有其他类需要知道控制器的Nib/Storyboard所在的文件的名称).让我们比较一下可能用来创建这种方法的相关代码片段.单行代码就是两者之间的完全差异.
故事板
+ (ViewController *)create
{
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"ViewController" bundle:nil];
return [storyboard instantiateInitialViewController];
}
Run Code Online (Sandbox Code Playgroud)
笔尖
+ (ViewController *)create
{
return [super initWithNibName:@"ViewController" bundle:nil];
}
Run Code Online (Sandbox Code Playgroud)
用法
- (void)showMyViewController
{
ViewController *vc = [ViewController create];
[self presentViewController:vc animated:YES completion:nil];
}
Run Code Online (Sandbox Code Playgroud)
故事板
static func create() -> ViewController {
let storyboard = UIStoryboard(name: "ViewController", bundle: NSBundle.mainBundle())
return storyboard.instantiateInitialViewController() as! ViewController
}
Run Code Online (Sandbox Code Playgroud)
笔尖
static func create() -> ViewController {
return ViewController(nibName: "ViewController", bundle: nil)
}
Run Code Online (Sandbox Code Playgroud)
用法
func showMyViewController() {
let vc = ViewController.create()
self.presentViewController(vc, animated: true, completion: nil)
}
Run Code Online (Sandbox Code Playgroud)
我将解决Nibs的所有常见论点; 正如我之前提到的,主要是支持单个文件,而不是作为Nib在Storyboard上的参数
参数:如果您正在与多人进行更改的团队合作,拥有包含大量视图控制器的故事板将导致合并冲突
响应:单个故事板不会导致合并冲突比单个Nib更多
争论:非常复杂的应用程序在故事板中有很多场景,导致一个巨大的故事板,需要永远加载,因为它的大小几乎无法理解.
回复:这是一个很好的观点,但您可以轻松地将Storyboard分解为更小的部分.故事板参考看起来像一个很棒的功能,可用于将故事板链接在一起,但它们仅在Xcode 7/iOS 9+中可用.此外,仍然没有理由在故事板上选择单个Nib.
参数:为每个UIViewController子类创建一个Nib 可以重复使用代码,因此您不必为故事板中的每个场景设置所有约束和出口.
回应:同样,没有理由选择单个故事板上的单个Nib.
几个月前在LiDG会议上发表了关于Storyboard的精彩演讲.
就个人而言,我认为这是使用新应用程序的方式.有一些差距,特别是对于非常复杂的应用程序,但专业人士大多超过缺点.
故事板的更多好处:
缺点是:
当 Storyboard 包含大量视图控制器时,在 XCode 中渲染速度很慢
不能为故事板中的一个视图控制器启用自动布局。
| 归档时间: |
|
| 查看次数: |
36818 次 |
| 最近记录: |