讓tableView的高度等於contentSize的高度、動態調整tableView的高度、tableView的高度自適應布局


文章概要:

1、簡介下,tableView中的內容如何高度自適應的布局

2、如何做到讓tableView的高度動態調整


還是看圖作文吧~

首先,tableView的高度就是用戶能夠看見里面更大世界的那個窗口的大小,一般是固定的。

然后在cell里面布局的時候,像圖中粉紅色的view展示的內容需要全部展示出來,這樣的話這個粉紅view的高度就需要是動態變化的。比如一個UILabel,因為它是屬於有內置大小的控件(自身的size通過其內部的內容所決定可以自身計算出來的控件),你只需要設置這個label的原點(x,y)和寬度就行了,當然還要設置lineNumber = 0(不限制行數)。然后cell的高度不要設定成固定數值,cell的高度由內部view決定。

tableView是scrollView的子類,那如何設置contentSize呢?由最后一個cell的底部決定。

OK。這就是我們一般做的tableViewCell高度自適應的布局方式,思維發散下,我們直接用scrollView的時候,設置contentSize也要用這種布局策略:由內部決定外部。

-----------

然后第二個需求是這樣的:打開軟件彈出贈送的優惠券列表,優惠券多的情況下就固定tableView的高度,讓里面的內容可以滾動。如果優惠券少的情況下,里面的內容不足以滾動的情況下,就讓tableView本身的高度變為“剛好”能展示里面的內容就行了。

將這個需求轉化為技術語言的話就是,給定tableView的contentView一個最大的高度MaxHeight,如果contentView的真實高度小於MaxHeight的時候,tableView的高度就是contentView的真實高度,如果contentView的真實高度大於MaxHeight的時候,tableView的高度就固定在MaxHeight。

實現代碼:

- (void)setupMonitor {
    [self.homePageCouponsTableView addObserver:self forKeyPath:@"contentSize" options:NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld context:nil];
}

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSKeyValueChangeKey,id> *)change context:(void *)context {
    CGRect tableFrame = self.homePageCouponsTableView.frame;
    tableFrame.size = self.homePageCouponsTableView.contentSize;
    if (tableFrame.size.height < 280) {
        [self.homePageCouponsTableView mas_remakeConstraints:^(MASConstraintMaker *make) {
            make.top.mas_equalTo(self.titleLabel.mas_bottom).offset(10);
            make.left.mas_equalTo(self.bgView.mas_left).offset(15);
            make.right.mas_equalTo(self.bgView.mas_right).offset(-15);
            make.bottom.mas_equalTo(self.bgView.mas_bottom).offset(-25);
            make.height.mas_equalTo(tableFrame.size.height);
        }];
        [self.homePageCouponsTableView.superview layoutIfNeeded];
    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM