Is it possible to use AutoLayout with UITableView's tableHeaderView?

前端 未结 29 1343
醉梦人生
醉梦人生 2020-11-28 19:51

Since I discovered AutoLayout I use it everywhere, now I\'m trying to use it with a tableHeaderView.

I made a subclass of

29条回答
  •  攒了一身酷
    2020-11-28 20:32

    Extended this solution http://collindonnell.com/2015/09/29/dynamically-sized-table-view-header-or-footer-using-auto-layout/ for table footer view:

    @interface AutolayoutTableView : UITableView
    
    @end
    
    @implementation AutolayoutTableView
    
    - (void)layoutSubviews {
        [super layoutSubviews];
    
        // Dynamic sizing for the header view
        if (self.tableHeaderView) {
            CGFloat height = [self.tableHeaderView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize].height;
            CGRect headerFrame = self.tableHeaderView.frame;
    
            // If we don't have this check, viewDidLayoutSubviews() will get
            // repeatedly, causing the app to hang.
            if (height != headerFrame.size.height) {
                headerFrame.size.height = height;
                self.tableHeaderView.frame = headerFrame;
                self.tableHeaderView = self.tableHeaderView;
            }
    
            [self.tableHeaderView layoutIfNeeded];
        }
    
        // Dynamic sizing for the footer view
        if (self.tableFooterView) {
            CGFloat height = [self.tableFooterView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize].height;
            CGRect footerFrame = self.tableFooterView.frame;
    
            // If we don't have this check, viewDidLayoutSubviews() will get
            // repeatedly, causing the app to hang.
            if (height != footerFrame.size.height) {
                footerFrame.size.height = height;
                self.tableFooterView.frame = footerFrame;
                self.tableFooterView = self.tableFooterView;
            }
    
            self.tableFooterView.transform = CGAffineTransformMakeTranslation(0, self.contentSize.height - footerFrame.size.height);
            [self.tableFooterView layoutIfNeeded];
        }
    }
    
    @end
    

提交回复
热议问题