SDAutoLayout控件使用

SDAutoLayout控件使用起来不错,发现之前比较麻烦的问题都被这个控件解决。非常棒的一个控件。

创建项目,加入控件

 

添加模型类

#import <Foundation/Foundation.h>

@interface News : NSObject
@property (nonatomic, copy) NSString *title;
@property (nonatomic, copy) NSString *content;
@end

 添加单元格控件

#import <UIKit/UIKit.h>
#import "News.h"
@interface NewsCell : UITableViewCell
@property (nonatomic, strong) UILabel *labeltitle;
@property (nonatomic, strong) UILabel *labelcontent;
@property (nonatomic, strong) News *news;
@end



#import "NewsCell.h"
#import "UIView+SDAutoLayout.h"

@implementation NewsCell

- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
    if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {
        [self setup];
    }
    return self;
}


/**
 *  初始化单元格
 */
- (void)setup {
    /**
     *  1.把控件添加到父空间里
     */
    UILabel *labeltitle = [UILabel new];
    labeltitle.textColor = [UIColor grayColor];
    labeltitle.font = [UIFont systemFontOfSize:15];
    [self.contentView addSubview:labeltitle];
    self.labeltitle = labeltitle;
    
    UILabel *labelcontent = [UILabel new];
    labelcontent.textColor = [UIColor lightGrayColor];
    labelcontent.font = [UIFont systemFontOfSize:14];
    [self.contentView addSubview:labelcontent];
    self.labelcontent = labelcontent;
    
    /**
     *  2.添加约束
     */
    CGFloat margin = 10;
    
    self.labeltitle.sd_layout
    .leftSpaceToView(self.contentView, margin)
    .topSpaceToView(self.contentView, margin)
    .rightSpaceToView(self.contentView, margin)
    .heightIs(20);
    
    self.labelcontent.sd_layout
    .leftEqualToView(self.labeltitle)
    .rightEqualToView(self.labeltitle)
    .topSpaceToView(self.labeltitle,margin)
    .autoHeightRatio(0);
    //.heightIs(0);这样写就不会显示出内容
    
    /**
     *  3.需要制定底部参考控件
     */
    [self setupAutoHeightWithBottomView:self.labelcontent bottomMargin:margin];
}

- (void)setNews:(News *)news {
    _news = news;
    self.labeltitle.text = news.title;
    self.labelcontent.text = news.content;
}

- (void)awakeFromNib {
    // Initialization code
}

- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
    [super setSelected:selected animated:animated];

    // Configure the view for the selected state
}

@end

 添加控制器代码

//
//  NewsController.m
//  sdtest
//
//  Created by zhangliang on 16/2/26.
//  Copyright © 2016年 com.crscic. All rights reserved.
//

#import "NewsController.h"
#import "MJExtension.h"
#import "UITableView+SDAutoTableViewCellHeight.h"

#import "NewsCell.h"
#import "News.h"


static NSString *reuseIdentifier = @"reuseIdentifier";

@interface NewsController ()
@property (nonatomic, strong) NSArray *list;
@property (nonatomic, strong) NSArray *news;
@end

@implementation NewsController

- (void)viewDidLoad {
    [super viewDidLoad];
    
    self.list = @[
                  @{@"title":@"《把时间当作朋友》——介绍几个十分有效的时间管理工具"
                    ,@"content":@"拿到书之后读了前面几节便欲罢不能,因为书中列举的很多实例确实很符合我的情s,看一本书如果能让我想明白一个道理,或者自己有一点进步就好,这本书做到了,对兴趣的谈论让我茅塞顿开。下面直接上图,有兴趣的可以自己阅读,本博客主要还是介绍几个时间管理软件的。"},
                  @{@"title":@"《把时间当作朋友》——介绍几个十分有效的时间管理工具"
                    ,@"content":@"拿到书之后读了前面几节便欲罢不能,因为书中列举的很多实例确实很符合我的情况,s绍几个时间管理软件的。"},
                  @{@"title":@"《把时间当作朋友》——介绍几个十分有效的时间管理工具"
                    ,@"content":@"拿到书之后s几个时间管理软件的。"},
                  @{@"title":@"《把时间当作朋友》——介绍几个十分有效的时间管理工具"
                    ,@"content":@"拿到书之后读了前面几节便欲罢不能,因为书中列举的很多实例确实很符合我的情况,所以匆匆s茅塞顿开。下面直接上图,有兴趣的可以自己阅读,本博客主要还是介绍几个时间管理软件的。"},
                  @{@"title":@"《把时间当作朋友》——介绍几个十分有效的时间管理工具"
                    ,@"content":@"拿到书之后读了前面几节便欲罢不能,因为书中列举的很多实例确实很符合我的情况,所以匆匆读完s顿开。下面直接上图,有兴趣的可以自己阅读,本博客主要还是介绍几个时间管理软件的。"},
                  @{@"title":@"《把时间当作朋友》——介绍几个十分有效的时间管理工具"
                    ,@"content":@"拿到书之后读了前面几节便欲罢不能,因为书中列举的很多实例确实很符合我的情况,所以匆匆读完了此s明白一个道理,或者自己有一点进步就好,这本书做到了,对兴趣的谈论让我茅塞顿开。下面直接上图,有兴趣的可以自己阅读,本博客主要还是介绍几个时间管理软件的。"},
                  @{@"title":@"《把时间当作朋友》——介绍几个十分有效的时间管理工具"
                    ,@"content":@"拿到书之后读了前面几节便欲罢不能,因为书中列举的很多实例确实很符合我的情况,所以匆匆读完了此书,总体感觉是前面内容比较好,让我有了一些思考,后面的章节却难免落入了俗套,不过看了之后肯定是有一些收获的,个人给7/10分,个人觉得,看一本书如果能让我想明白一个道理,或者自己有一点进步就好,这本书做到了,对兴趣的谈论让我茅塞顿开。下面直接上图,有兴趣的可以自己阅读,本博客主要还是介绍几个时间管理软件的。"},
                  @{@"title":@"《把时间当作朋友》——介绍几个十分有效的时间管理工具"
                    ,@"content":@"拿到书之后读了前面几节便欲罢不能,因为书中列举的很多实例确实很符合我的情况,所以匆匆读完了此书,总体感觉是前面内容比较好,让我有了一些思考,后面的章节却难免落入了俗套,不过看了之后肯定是有一些收获的,个人给7/10分,个人觉得,看一本书如果能让我想明白一个道理,或者自己有一点进步就好,这本书做到了,对兴趣的谈论让我茅塞顿开。下面直接上图,有兴趣的可以自己阅读,本博客主要还是介绍几个时间管理软件的。"},
                  @{@"title":@"《把时间当作朋友》——介绍几个十分有效的时间管理工具"
                    ,@"content":@"拿到书之后读了前面几节便欲罢不能,因为书中列举的很多实例确实很符合我的情况,所以匆匆读完了此书,总体感觉是前面内容比较好,让我有了一些思考,后面的章节却难免落入了俗套,不过看了之后肯定是有一些收获的,个人给7/10分,个人觉得,看一本书如果能让我想明白一个道理,或者自己有一点进步就好,这本书做到了,对兴趣的谈论让我茅塞顿开。下面直接上图,有兴趣的可以自己阅读,本博客主要还是介绍几个时间管理软件的。"}
                  ];
    
    
    __weak __typeof(self) weakSelf = self;
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
        self.news = [News objectArrayWithKeyValuesArray:self.list];
        dispatch_async(dispatch_get_main_queue(), ^{
            [weakSelf.tableView reloadData];
        });
        
    });
    
}



#pragma mark - Table view data source



- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {

    return self.news.count;
}


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    NewsCell *cell = [tableView dequeueReusableCellWithIdentifier:@"reuseIdentifier"];
    if (cell == nil) {
        cell = [[NewsCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:reuseIdentifier];
    }
    News *news = self.news[indexPath.row];
    cell.news = news;
    return cell;
}

#pragma mark -- 计算高度
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
    return [self cellHeightForIndexPath:indexPath cellContentViewWidth:[UIScreen mainScreen].bounds.size.width];
}



@end

 结果

 

posted on 2016-02-26 11:43  老猫zl  阅读(5049)  评论(0编辑  收藏  举报