亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

調整UITableView的大小以適合內容

調整UITableView的大小以適合內容

iOS
冉冉說 2019-10-16 10:34:49
我正在創建一個應用程序,它將在中有一個問題,UILabel并在中顯示選擇題答案UITableView,每行顯示一個選擇題。問題和答案會有所不同,因此我需要UITableView保持高度變化。我想sizeToFit在桌子旁找個工作。將表格的框架設置為所有內容的高度。誰能建議我如何實現這一目標?
查看完整描述

3 回答

?
翻翻過去那場雪

TA貢獻2065條經驗 獲得超14個贊

實際上,我自己找到了答案。


我只是創建一個新CGRect的tableView.frame用height的table.contentSize.height


這臺的高度UITableView到height它的內容。由于代碼修改了UI,因此請不要忘記在主線程中運行它:


dispatch_async(dispatch_get_main_queue(), ^{

        //This code will run in the main thread:

        CGRect frame = self.tableView.frame;

        frame.size.height = self.tableView.contentSize.height;

        self.tableView.frame = frame;

    });


查看完整回答
反對 回復 2019-10-16
?
夢里花落0921

TA貢獻1772條經驗 獲得超6個贊

無需KVO,DispatchQueue或自行設置約束的Swift 5和4.2解決方案。


該解決方案基于Gulz的答案。


1)創建以下子類UITableView:


import UIKit


final class ContentSizedTableView: UITableView {

    override var contentSize:CGSize {

        didSet {

            invalidateIntrinsicContentSize()

        }

    }


    override var intrinsicContentSize: CGSize {

        layoutIfNeeded()

        return CGSize(width: UIView.noIntrinsicMetric, height: contentSize.height)

    }

}

2)UITableView在布局中添加一個,并在所有側面設置約束。將其類別設置為ContentSizedTableView。


3)您應該看到一些錯誤,因為Storyboard并未考慮我們的子類intrinsicContentSize。通過打開大小檢查器并將internalContentSize重寫為占位符值來解決此問題。這是設計時間的替代。在運行時,它將在ContentSizedTableView類中使用重寫


更新:更改了Swift 4.2的代碼。如果您使用的是早期版本,請使用UIViewNoIntrinsicMetric代替UIView.noIntrinsicMetric


查看完整回答
反對 回復 2019-10-16
?
守候你守候我

TA貢獻1802條經驗 獲得超10個贊

快速解決方案


跟著這些步驟:


1-在情節提要中設置表格的高度限制。


2-從情節提要中拖動高度約束,并在視圖控制器文件中為其創建@IBOutlet。


    @IBOutlet weak var tableHeight: NSLayoutConstraint!

3-然后您可以使用以下代碼動態更改桌子的高度:


override func viewWillLayoutSubviews() {

    super.updateViewConstraints()

    self.tableHeight?.constant = self.table.contentSize.height

}

更新資料


如果為您剪切了最后一行,請嘗試在willDisplay單元格函數中調用viewWillLayoutSubviews():


func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {

    self.viewWillLayoutSubviews()

}


查看完整回答
反對 回復 2019-10-16
  • 3 回答
  • 0 關注
  • 872 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號