最近在学习Autolayout, 伴随着项目的开发,遇到了许多应用场景,下面把遇到的几个场景描述下
1.设定多个视图在宽度上保持2:1
场景是这样的,我页面中在横向放置个视图,左右放置,高度固定,其中一个视图屏幕的2/3,另一个视图占屏幕的1/3。设置步骤如下
1、拖动2个view到屏幕中,取名为view1 和view2
2、设置view1和view2的约束
添加view1约束为left=0;top=64;height=200;
添加view2约束为trailing=0;top=64;hegith =200;
添加view1和view2水平距离约束为0
添加view1和view2 withsequal约束 设置约束的属性值multiplier 为1:2
约束截图如下
3.参照例子中“固定横框比1:2”
2.设置视图的宽度、高度为固定比例
场景是这样的,APP首页要做一个轮播广告。广告的图片比例是固定的2:1,由于现在苹果屏幕宽度不在单一,所以没法通过width和height来设置。这个时候可以通过设置视图的XX属性来控制。下面介绍步骤:
1、拖动自定义视图到主视图;
2、设定自定义视图约束;
约束为left=0;right=0;top=0;aspect radtio=2:1。整体约束截图如下
3.参照例子中“页面视图2:1”
3.旋转视图
参照例子中“旋转视图”
4.自定义tableView
应用场景,tableCell的内容是自定义的,其中包含2个View,这2个view是自定义的。实现操作如下
1、首先按部就班,拖动tableView,创建约束
2、创建一个动态Cell,其中拖动2个View,
把class设为你自定义的类GoodsView
3、创建自定义view,取名GoodsView,这里需要注意的是
在xib中设置GoodsView的File's Owner的Classes为GoodsView,此时,如果按照通常设置View的Class为GoodsView,则tableCell在初始化的时候只会创建GoodsView对象,但是里面的属性是不能初始化的
4、GoodsView中实现自定义代码
- (id)initWithCoder:(NSCoder *)aDecoder
{
if (self = [super initWithCoder:aDecoder]) {
UIView *containerView = [[[UINib nibWithNibName:@"GoodsView" bundle:nil] instantiateWithOwner:self options:nil] objectAtIndex:0];
CGRect newFrame = CGRectMake(0, 0, self.frame.size.width, self.frame.size.height);
containerView.frame = newFrame;
[self addSubview:containerView];
}
return self;
}
具体参照例子中“自定义tableView”
5.自定义tableView高度
应用场景是这样的。有一个tableView,其中的cell高度是不不固定的,需要根据填充的内容来进行高度计算。
1、设置UILabel的lines为0;
2、选中UILabel的Explicit
3、设置label的约束
4、通过代码动态计算高度
- (CGFloat)heightForAddressListCellAtIndexPath:(NSIndexPath *)indexPath
{
static CustomHeightCell *cell = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
cell = [self.mainTableView dequeueReusableCellWithIdentifier:@"CustomHeightCell"];
});
AddressInfo *info = [self.addressArray objectAtIndex:indexPath.row];
cell.nameLabel.text = info.receiver;
cell.mobileLabel.text = info.tel;
cell.detailLabel.text = info.address;
return [self calculateHeightForCell:cell];
}
- (CGFloat)calculateHeightForCell:(UITableViewCell *)sizingCell
{
sizingCell.bounds = CGRectMake(0.0f, 0.0f, CGRectGetWidth(self.mainTableView.bounds), 0.0f);
[sizingCell layoutIfNeeded];
CGSize size = [sizingCell.contentView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize];
return size.height ;
}
参照例子中“自定义tableView高度,该例子也实现了通过代码控制Autolayout动画效果”
6.UIScrollview设置约束
在UIScrollview中添加一个view1跟在View中添加view1存在一些不同的地方
比如在view中添加view1 只需要下列约束即可
top=64; leading=50;widht=100;height=100;
比如在UIScrollview中添加view1 只需要下列约束即可
top=64; leading=50;widht=100;height=100; bottom=10; 其中bottom约束的优先级设置为250
为什么会这样呢,因为在UIScrollview中有个属性叫做contentSize,如果此时不设置bottom约束,那么UIScrollview将不知道自己的contentSize重的height有多大。设置优先级为250 是因为。此时view1的高度约束和bottom约束存在冲突,设置优先级为250是表示优先支持高度约束。在我们日常开发中,只需要设置bottom约束,如果用不到该约束,也就不需要管他了
详细参考例子UIScrollview设置
- 大小: 498.4 KB
- 大小: 200.6 KB
- 大小: 277.7 KB
- 大小: 270 KB
- 大小: 235.7 KB
分享到:
相关推荐
ios之用Autolayout均匀平铺排列多个button,支持各种屏幕的大小,均匀平铺多个view。
xamarin学习笔记B06(ios的Autolayout布局技术)Autolayout是一种自动布局技术,很方便进行屏幕适配。
最近在研究UITableViewCell高度的自适应,在网上找到了一个国内人员开发的工具类,自己下载下来研究了一下,感觉非常不错,用起来也非常方便,这是高手的博客地址...用这个之前要会使用AutoLayout
ios6 新功能 AutoLayout的使用,一共4个例子,解决不同设备的UI定位问题
项目需要,大致了解了一下预估高度机制原理 。 写的可能不是太好。 适合新手学习,挺简单的。 有注释。
代码实现的AutoLayout,简单的使用了VFL。
使用纯代码编写的iOS中UIScrollView用autolayout布局适配不同屏幕
Apple从iOS6加入了Auto Layout后开始就比较委婉的开始鼓励、建议开发者使用自适应布局,但是到目前为止,我感觉大多数开发者一直在回避这个问题,不管是不是由于历史原因造成的,至少他们在心底还坚守着固定布局的老...
iOS页面 Autolayout
iOS Autolayout PDF Ebook
iOS8开发~UI布局(二)storyboard中autolayout和size class的使用详解
本程序主要实现的功能是使用VFL语言实现屏幕适配,纯代码的方式,Autolayout实现屏幕适配
由于ios8的发布,屏幕尺寸的变化,之前兼容ios5的应用,现在决定放弃ios5的兼容,改用兼容ios6开始!之前纯代码的编程方式要改变一下了,现在记录一下学习
在对界面进行布局的时候,我们经常使用AutoLayout对界面进行布局...下面这篇文章主要给大家介绍了iOS中AutoLayout使用实践的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面来一起看看吧。
ios_autolayout_demo iOS AutoLayout 以编程方式: NSLayoutConstraint 和 。 NSLayoutConstraint 演示: :
ios demo,Masonry的自动布局的使用,一个在ios中可以替代autoLayout的布局,代码控制,弹性高。
对iOS里AutoLayout的深入理解和剖析
ios8autolayout,新的size设置,学习demo,详情见文件。
ios autolayout tableview