iOS-UITableView设置footerView遇见的一些问题

今天封装了一个View作为UITableView的footerView,但是footerView的高度是根据请求的数据动态决定的,但是发现最后显示的footerView的高度总是不对。

具体问题如下

设计一个SFFooterView,

@interface SFFooterView : UIView

@end

重载.m文件的initWithFrame:方法,在该方法中通过afn请求数据,数据请求成功后假设将该View的高度设置为1000,背景色设置为红色。

- (instancetype)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
        NSMutableDictionary *parameter = [NSMutableDictionary dictionary];
        parameter[@"x"] = @"xxx";
        parameter[@"xx"] = @"xxxx";
        [manager GET:@"xxxxx" parameters:parameter progress:^(NSProgress * _Nonnull downloadProgress) {
            
        } success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {

            // View的高度设置为1000,背景色设置为红色
            self.frame = CGRectMake(self.frame.origin.x, self.frame.origin.y, 
                                    self.frame.size.width, 1000);
            self.backgroundColor = [UIColor redColor];
        } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
            
        }];
    }
    return self;
}

在控制器中设置tableView的tableFooterView属性

self.tableView.tableFooterView = [[SFFooterView alloc] init];

运行程序看看效果,如下图,发现footerView的背景已经变为红色,但是高度不是1000。这是因为在设置self.tableView.tableFooterView = [[SFFooterView alloc] init];时需要指定footerView的bounds,不然高度是不对的,因为在SFFooterView通过afn请求数据成功后在改变footerView的高度,此时tableView的footerView已经设置完成了,在改变高度也无济于事了。

解决方法

要想让footerView的高度根据请求数据动态改变高度,只需在afn请求数据成功的block中最后添加两行代码,即将self重新赋值给tableFooterView属性。

 UITableView *tableView = (UITableView *)self.superview;
 tableView.tableFooterView = self;

再次运行程序,效果如下,此时footerView的高度已经是1000啦。


源码例子SFTableViewFooterView

你可能感兴趣的:(iOS-UITableView设置footerView遇见的一些问题)