zoukankan      html  css  js  c++  java
  • iOS - UITableView加载网络图片 cell适应图片高度

    使用xib创建自定制cell   显示图片   创建一个继承UITableViewCell的类   勾选xib

    如下是xib创建图

    xib

     

    向.h拖拽一个关联线

    .h

    .m

     2.代码创建(使用三方适配库进行适配Masonry三方代码适配)

    .h

    #import <UIKit/UIKit.h>

     

    @interface NFTrailerNextTableViewCell : UITableViewCell

    @property (nonatomic, strong) UIButton *imageBtn;

    @end

     

    .m

    #import "NFTrailerNextTableViewCell.h"

     

    @implementation NFTrailerNextTableViewCell

     

    - (void)awakeFromNib {

        [super awakeFromNib];

        // Initialization code

    }

     

    - (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {

        self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];

        if (self) {

            

            [self.contentView addSubview:self.imageBtn];

            [self.imageBtn mas_makeConstraints:^(MASConstraintMaker *make) {

                make.left.offset(0);

                make.top.offset(0);

                make.right.offset(0);

                make.bottom.offset(-10);

            }];

        }

        return self;

    }

     

    - (UIButton *)imageBtn {

        if (nil == _imageBtn) {

            _imageBtn = [[UIButton alloc] init];

            _imageBtn.userInteractionEnabled = NO;

        }

        return _imageBtn;

    }

     

    - (void)setSelected:(BOOL)selected animated:(BOOL)animated {

        [super setSelected:selected animated:animated];

     

        // Configure the view for the selected state

    }

     

    @end

     

     下面是公用的tableView的代理方法   以及使用SDImageView加载图片的方法

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

        

        //self.dataArr.count

        return self.imagearr.count;

        

    }

    -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{

        

        NFTrailerNextTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:NSStringFromClass([NFTrailerNextTableViewCell class])];

        [self configureCell:cell atIndexPath:indexPath];

        cell.userInteractionEnabled = NO;

        cell.selectionStyle = UITableViewCellSelectionStyleNone;

        return cell;

    }

     

    //加载图片

    - (void)configureCell:(NFTrailerNextTableViewCell *)cell atIndexPath:(NSIndexPath *)indexPath {

        NSString *imgURL = self.imagearr[indexPath.row];

        UIImage *cachedImage = [[SDImageCache sharedImageCache] imageFromDiskCacheForKey:imgURL];

        if ( !cachedImage ) {

            [self downloadImage:self.imagearr[indexPath.row] forIndexPath:indexPath];

            [cell.imageBtn setBackgroundImage:[UIImage imageNamed:@"国投互联"] forState:UIControlStateNormal];

        } else {

            [cell.imageBtn setBackgroundImage:cachedImage forState:UIControlStateNormal];

        }

    }

     

    - (void)downloadImage:(NSString *)imageURL forIndexPath:(NSIndexPath *)indexPath {

        // 利用 SDWebImage 框架提供的功能下载图片

        [[SDWebImageDownloader sharedDownloader] downloadImageWithURL:[NSURL URLWithString:imageURL] options:SDWebImageDownloaderUseNSURLCache progress:^(NSInteger receivedSize, NSInteger expectedSize, NSURL * _Nullable targetURL) {

            

        } completed:^(UIImage * _Nullable image, NSData * _Nullable data, NSError * _Nullable error, BOOL finished) {

            [[SDImageCache sharedImageCache] storeImage:image forKey:imageURL toDisk:YES completion:^{

                

            }];

            dispatch_async(dispatch_get_main_queue(), ^{

                [self.NFTableView reloadData];

            });

        }];

    }

     

    -(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{

        // 先从缓存中查找图片

        UIImage *image = [[SDImageCache sharedImageCache] imageFromDiskCacheForKey:self.imagearr[indexPath.row]];

        // 没有找到已下载的图片就使用默认的占位图,当然高度也是默认的高度了,除了高度不固定的文字部分。

        if (!image) {

            image = [UIImage imageNamed:@"国投互联"];

        }

        //手动计算cell

        CGFloat imgHeight = image.size.height * [UIScreen mainScreen].bounds.size.width / image.size.width;

        return imgHeight;

    }

     

    这样就可以了再见

  • 相关阅读:
    浅谈 cosos2d-x 的ImageView和Sprite的区别
    浅谈JS数据遍历的几种方式
    浅谈Cocos2d-js cc.director
    JavaScript的Let用法
    JS开发工具WebStorm使用快捷键
    python 文件操作
    浅谈代码自动构建工具
    rhel6.4 zabbix 安装时少的bcmath mbstring
    Security:090476]Invalid/unknown SSL header was received from peer locahost during SSL handshake
    jconsole
  • 原文地址:https://www.cnblogs.com/sunfuyou/p/7261730.html
Copyright © 2011-2022 走看看