以编程方式创建视图是一件坏事吗?

时间:2015-09-07 10:53:28

标签: ios swift

所以我是iOS开发的新手,我发现以编程方式编写视图更容易。所以我的观点有UIViews,ScrollViews,UIButton,UILabel都是以编程方式创建和定位的。 (所以我从未使用过AutoLayouts。)

我现在已经完成了我的应用程序,想要制作iPad视图,并意识到这样做也许是一个坏主意。

这是不好的做法,还是我应该尽可能多地使用自动布局?

如果可以做到这一点我现在正在做什么,为iOS和iPad添加不同视图的正确方法是什么?我在下面看到了关于如何找到设备的这个答案,是一个简单的if else声明是否足够? - iOS: How to determine the current iPhone/device model in Swift?

4 个答案:

答案 0 :(得分:3)

我正在使用实时应用程序中的程序化视图并且它非常棒。一群人我也认识我们。

这是一个我用来在两种方法之间进行选择的算法:

  • 您是否正在为客户或业余爱好构建快速应用?使用自动布局的故事板。
  • 您是否正在构建一个将被许多人使用的开源项目?使用程序化UI
  • 您是否正在构建应用程序? (1年以上)使用程序化UI

制作应该在没有自动布局的情况下旋转的应用程序也更难。因为使用代码执行此操作需要比自动布局更多的工作。大多数优秀的应用程序都不使用此功能,所以我不会发现太多问题。

一个好的提示是在编写程序化UI时永远不要使用常量。

如果要创建宽度为100px的按钮,请不要在代码中的任何位置键入100px。而是根据屏幕尺寸计算屏幕尺寸并放置主视图。然后根据主视图的位置放置子视图或辅助视图。如果您正确执行此操作,您将拥有比自动布局更强大的多设备布局支持。

这是我写的一个小图书馆,请检查并播放有关我如何放置视图的代码:https://github.com/goktugyil/CozyLoadingActivity/blob/master/CozyLoadingActivity.swift

这里有一篇我喜欢的好文章: http://www.toptal.com/ios/ios-user-interfaces-storyboards-vs-nibs-vs-custom-code

答案 1 :(得分:1)

这很好,如果你有足够的时间,耐心,良好的计算技能和不同UI元素之间的关系配置。

但是,使用自动布局非常有用,而且比手动计算耗时少。

我们可以轻松创建动态且多功能的界面,以最小的努力适当地响应屏幕尺寸,设备方向和本地化的变化。

阅读Adopting Auto Layout,在现有应用程序中实施自动布局

答案 2 :(得分:0)

<强> TL; DR

取决于

更长版本

显然,一种尺寸并不适合所有人。 AutoLayout在Interface Builder和代码中都非常强大(无论是视觉语言格式,还是简单的约束设置),但有时它似乎只是“用左手揉搓右耳” - 这是以编程方式添加视图的时候。但要注意在每个视图控制器中没有不同之处 - 你不想在项目中引入太多的复杂性,对吗?

我个人喜欢尽可能多地使用AutoLayout,每当我不能再使用它时,或者StoryBoard View会因为数百万的限制而变得混乱,我尝试将视图分成容器 - 让容器调整大小通过AutoLayout并通过代码处理子视图。

示例将是一个自定义媒体播放器 - 也许我想在视频下方和上方有两条条纹 - 我可以通过AutoLayout处理视频和两条UIView扩展条纹。但是条带本身的子视图(控件)将通过代码添加。它让我可以控制我的代码,但它仍然没有引入太多的复杂性。

答案 3 :(得分:0)

首先 - 如果你想为iOS开发,你必须学习Autolayout。已经有很多不同的设备different resolutions,未来可能会更多。

中学 - 如果你想与IB有效合作,你必须阅读guide /观看教程视频并进行一些练习。它可能很难开始,但随后你会发现IB功能强大,速度快,而且往往是开发GUI的最佳方式。通常,但并不总是!

代码优势:

  1. 易于复制粘贴和重用GUI。如果你有,那可能是至关重要的 几个相似的视图或想要重用一些旧代码。
  2. 轻松解决合并冲突并检查提交。
  3. 更容易制作样式 - 与所有标签的字体相同,具体取决于国家/地区。
  4. 更强大(有些事情无法用IB完成)所以你有时必须使用它。
  5. IB优势:

    1. 您可以see your GUI during development获取不同的分辨率/本地化,这样您就不必在不同的设备/模拟器上编译和运行项目来检查GUI是否正常。如果您忘记了某些Autolayout约束或存在冲突,IB也会向您显示警告。如果您的复杂GUI具有非平凡的Autolayout约束,则可以节省大量时间。
    2. 如果它是在IB中开发的,那么理解别人的代码要容易得多。对于复杂的GUI尤其重要 - 在几百行代码中找不到所需的标签或按钮就不那么容易了。
    3. 小额奖金 - 如果您想使用通过代码开发的自定义控件,可以将其设为IBInspectable并在IB中使用它而不会出现问题
    4. 总结一下 - 如果您不需要IB优势(例如GUI非常简单并且不使用Autolayout),通过代码开发GUI可以更容易,更快捷。但是如果您必须支持不同的分辨率和/或每个视图控制器中有数百行GUI代码,我强烈建议您尝试使用IB。