`
fanfanlovey
  • 浏览: 71676 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论
阅读更多
最近在学习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
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics