作者cendre (desperado)
看板MacDev
标题Re: [讨论] 有无推荐的Autolayout教学 (用code)
时间Sat Aug 23 00:07:43 2014
※ 引述《SwiftLang (Swift-Lang)》之铭言:
: 话说Autolayout从iOS6出到现在了...到现在都还没搞懂它...真是惭愧
: 应该说每次看教学後自己尝试都失败, 觉得太难搞就放弃它了 囧
: 最近想来搞懂它, 有没有推荐的教学呢? 因为现在的project都是用纯code写
: 所以希望不是用storyboard来教学
推荐这份文件
https://developer.apple.com/library/ios/documentation/userexperience/
conceptual/AutolayoutPG/AutoLayoutinCode/AutoLayoutinCode.html
→ yes0324: 帮缩
http://ppt.cc/uTzT
: 另外我有几个问题想问
: 1) 例如我有一个tableView在controller的superview里面, 画面有navigationBar
^ 假设这是指 controller.view?
: 最底下有个320 x 50的广告, 我可以直接[[UITableView alloc] init](不设frame)
: 设定离navigationBar 0px, 离广告0px, 左右0x (或固定320)
: 让autolayout自己判断tableView该有的宽高是多少吗? 试过好多次都不成功
当三个 subviews 都已经 alloc init
self.navigationBar
self.tableView
self.adView
其中 self.navigationBar 已经用 setFrame: 设定好 (CGRect){{0, 0}, {320, 64}}
用 auto layout 的设定方式:
self.tableView.translatesAutoresizingMaskIntoConstraints = NO;
self.adView.translatesAutoresizingMaskIntoConstraints = NO;
[self.view addSubview:self.navigationBar];
[self.view addSubview:self.tableView];
[self.view addSubview:self.adView];
NSDictionary *views =
NSDictionaryOfVariableBindings(_navigationBar, _tableView, _adView);
NSArray *horizontal =
[NSLayoutConstraint constraintsWithVisualFormat:@"|[_tableView]|"
options:kNilOptions
metrics:nil
views:views];
[self.view addConstraints:horizontal];
NSString *fmt = @"V:[_navigationBar][_tableView][_adView(50)]|";
NSUInteger opt = NSLayoutFormatAlignAllLeft | NSLayoutFormatAlignAllRight;
NSArray *vertical =
[NSLayoutConstraint constraintsWithVisualFormat:fmt
options:opt
metrics:nil
views:views];
[self.view addConstraints:vertical];
: 2) 如果画面上有多个元件, 你们会用autolayout还是直接设frame呢?
: 例如两个UIButton好了
: 按钮1 ----------------- 按钮2
: 会设constraint让它自己去layout, 还是直接手动找frame啊
: y设定一样, button2的x是 button1的x + 多少 这样?
如果在 addSubview: 的时候 button.superview.frame 不是 CGRectZero
用 sizeToFit & setFrame: 放到左右两侧的位置,加上
button1.autoresizingMask = UIViewAutoresizingFlexibleRightMargin;
button2.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin;
应该就能得到 按钮1 ----------------- 按钮2 的效果
或者 auto layout @"|[button1]-(>=0)-[button2]|"
我的想法是简单的画面用 setFrame: 需要 i18n 或 dynamic font 则用 setConstraints:
: 3) autolayout在什麽情况下最好用呀...画面需要旋转的情况下吗?
: 如果没有需要旋转, 需要用到autolayout吗?
: 抱歉这问题很笨...开发那麽久了都还不知道autolayout怎麽用...真惭愧..
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 118.160.64.3
※ 文章网址: http://webptt.com/cn.aspx?n=bbs/MacDev/M.1408723665.A.5E1.html
※ 编辑: cendre (118.160.79.245), 08/27/2014 00:00:00