经过一天的折腾,我还是放弃IB用代码构建UI了

2013-07-15 20:12:38 +08:00
 refresh
这玩意儿实在不好调整,项目已经有一半的工作是用代码完成了,主要是对IB不熟悉,算了,还是放弃吧,代码就是工作量大点,但可控。

哭泣中,用于布局的重复性代码太多了

主要原因还是自己没有经过系统性的学习,捂脸...
7367 次点击
所在节点    iDev
54 条回复
chchwy
2013-07-15 22:58:00 +08:00
何不具體說說你遭遇的困難點?
alexrezit
2013-07-15 23:00:56 +08:00
不熟悉 IB 的话会很麻烦的.
tab
2013-07-16 00:32:29 +08:00
赶工的时候尽量少变动,可以把遇到的问题记下来,项目结束后带着问题学习。不过我一直认为,不会用IB的人很难写出规范的iOS UI,因为里头有些Apple的控件机制不好理解。个人理解的界面编程三层境界:纯代码->可视化编程->两者结合,融会贯通。IB确实很方便,如果你有个大显示器配合Storyboard那就更爽了。
refresh
2013-07-16 10:28:20 +08:00
@chchwy 现在问题卡在相对布局和自动大小上,估计坑还有很多,所以想等做完这个项目好好学习一下IB

@alexrezit 是很麻烦,一直用代码,基本上没用过IB

@tab 确实是这样的,不过多数人学习是从可视化开始的吧,两者结合是非常不错的选择,StoryBoard不适合组件化吧?我想把UI拆成一个一个组件,然后再把它们组装起来。
damngood
2013-07-16 10:57:13 +08:00
@tab @refresh 我觉得iOS下面的控件机制还比较好理解
倒是Mac OS下面UI的包装没iOS那么好理解, 想完全nibless的话还得hack那么一下

我写 iOS/Mac App 的时候也是一直用代码来写 UI 部分, 觉得那样比较纯粹一点, 看着心理舒服点
总觉得能放在代码里面的干嘛要放在额外的一个文件里面呢
如果你觉得这样导致代码比较多, 那也可以把 UI 块的代码写在一个方法里面然后给收缩起来

这样对于SCM来说也友好点吧.
当然关键还是心理舒服点 :)
tab
2013-07-16 11:13:21 +08:00
@refresh 从可视化开始会让多数人一头雾水,很多人不用IB恐怕正是这个时候留下的阴影。
你现在的问题是布局的代码较多,用了IB或者Storyboard直接就解决了。Storyboard就是组装用的,Apple自己的控件本身很完善了,如果不是较为复杂且经常重用的UI没必要组件化,消息传递啥的那样反倒麻烦,当然这个度得自己把握。
nil
2013-07-16 12:12:14 +08:00
代码写布局很难么?一个控件的布局也就两三行搞定了啊。。。
view.left = 10;
view.top = 10;

我是不是又土了。。。
ytzong
2013-07-16 13:12:32 +08:00
IB 构建 UI 的飘过
月经话题
refresh
2013-07-16 14:09:44 +08:00
@nil android? iOS下布局还是挺痛苦的

@tab 把所有东西全弄到一起,维护的时候也挺痛苦的,并且不利于复用。

@damngood 我基本就是你所说的做法,我在想,要是可以像写html一样写UI就好了,目前还没有见到比html/css更好的布局语言。
damngood
2013-07-16 14:14:27 +08:00
@refresh 我刚好反过来了.. 要是写 html css 那些 Web 组件也能像写 iOS 那样纯代码写那该多好呀.. :)
nil
2013-07-16 15:22:04 +08:00
@implementation UIView (layout)

- (CGFloat)left {
return self.frame.origin.x;
}

- (void)setLeft:(CGFloat)x {
CGRect frame = self.frame;
frame.origin.x = x;
self.frame = frame;
}
@end
代码不全贴了,给UIView扩展一些帮助方法,直接写view.left = xxx; view.centerX = xx;总感觉比IB里面拖来拖去,各种设置各种找舒服多了吧; 复杂的view直接写到subclass的layoutsubview方法里面,简单的布局直接写到loadview里面;
速度上应该不慢吧,灵活性上,代码重用上,能甩IB几条街了吧。。。
refresh
2013-07-16 16:47:27 +08:00
@nil 嗯,这样也不错,不过UIButton与UILabel这类怎么办,全部重写么?
这个项目不错,用宏的方式添加了很多layout。 https://github.com/mvx24/CGRectPositioning
sumanx
2013-07-16 18:17:17 +08:00
@refresh UIButton、UILabel这些不都是UIView么
so898
2013-07-16 19:01:37 +08:00
公司项目,从SB到代码……别拦我……哭泣中……
refresh
2013-07-16 19:14:25 +08:00
@sumanx UIButton是UIView没错,但有办法给它们统一加上left, top这些属性吗,需要全部重载啊,或者有啥方法我不知道的
PrideChung
2013-07-16 19:28:14 +08:00
@refresh 显然是用Catagory啊。
PrideChung
2013-07-16 19:29:14 +08:00
@refresh 再加上objc_runtime。
wtl
2013-07-16 19:50:58 +08:00
静态的布局用@nil说的给UIView加个category

动态的用autolayout 不过写起来挺长的 去找些第三方的库 可以少些点
比如这样 [button alignCenterYWithView:superView]
meepoli
2013-07-16 20:26:43 +08:00
我只能说,不会IB当你想有一个工作上的提升的时候,太吃亏了。

IB和纯Coding是都需要掌握的。也没有哪种方式比哪种方式高级的说法。
refresh
2013-07-16 21:13:18 +08:00
@wtl 求第三方库

@meepoli 是啊,可现学来不及,ib可以省好多事

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/75877

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX