如何基于UITableView高度动态设置UIScrollView高度?

时间:2017-07-13 06:08:24

标签: ios uitableview swift3 uiscrollview

我能够根据tableview内容高度给出scrollview的高度,但有时滚动视图高度不会滚动,有时scrollview高度基于tableview给我完美的高度,我很困惑它不会给我每一次,每次当我运行应用程序,它不是基于tableview给出完美的高度。在我的两个tableview数据来自Web,我是不是因为Internet慢而得到基于tableview高度的scrollview高度所以它在tableview中加载数据很慢??

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

        if tableView == tableview{
        let cell = tableview.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! noticeTableViewCell
        let noticedata = notices[indexPath.row]

        cell.noticeText.text =  noticedata.notice

             tableviewheightConstraint.constant = tableView.contentSize.height
//            scrollview.contentSize = CGSize(width: self.view.frame.size.width, height: tableview.frame.origin.y + tableView.contentSize.height )

            return cell

        } else  {
            let cell = pendingtableview.dequeueReusableCell(withIdentifier: "pendingbillcell", for: indexPath) as! PendingbillTableViewCell

            let getdata = pendingbillsdata[indexPath.row]

            let date = getdata.date
            let dateFormatter = DateFormatter()

            dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss"
            let dateFromString : NSDate = dateFormatter.date(from: date)! as NSDate
            dateFormatter.dateFormat = "dd-MM-yyyy"
            let datenew = dateFormatter.string(from: dateFromString as Date)

            cell.billnotext.text = getdata.Billno
            cell.datetext.text = datenew
            cell.amounttext.text = getdata.amount
            cell.statustext.text = getdata.status

            pendingtableviewheightConstraint.constant = tableView.contentSize.height
            scrollview.contentSize = CGSize(width: self.view.frame.size.width, height: pendingtableview.frame.origin.y + tableView.contentSize.height)
            return cell
        }

    }

或者我在代码中遗漏了一些我没有得到的东西,这个问题可以解决吗?

1 个答案:

答案 0 :(得分:2)

以下方式适用于商品。请查看

为scrollView,ContentView,tableView&创建IBOutlets。 tableView的高度约束(根据内容调整高度)

@IBOutlet weak var scrollView:UIScrollView!
@IBOutlet weak var contentView:UIView!
@IBOutlet weak var tableView:UITableView!

@IBOutlet var heightConstraints:NSLayoutConstraints!

在viewDidLoad方法

    // set delagte & datasource to tableView
    self.tableView.dataSource = self
    self.tableView.delagte = self

    self.tableView.rowHeight = UITableViewAutomaticDimension
    self.tableView.estimatedRowHeight = 40

    // force the layout of subviews before drawing
    self.defineTableView.layoutIfNeeded()

    // Observer for oreientation change
    NotificationCenter.default.addObserver(self, selector: #selector(self.updateScrollViewContentSize), name: NSNotification.Name.UIDeviceOrientationDidChange, object: nil)

在viewDidAppear方法

// calling to update scrollView contentSize after all views initialize done.
self.updateScrollViewContentSize()

计算UIScrollView内容大小的方法

@objc private func updateScrollViewContentSize(){
    // set dynamic height constant of tableView
    self.heightConstraints.constant = self.tableView.contentSize.height + 10.0
    var heightOfSubViews:CGFloat = 0.0
    for views in self.contentView.subviews {
        if views is UITableView {
            heightOfSubViews = heightOfSubViews + (views as! UITableView).contentSize.height + 10.0
        }else {
            heightOfSubViews = heightOfSubViews + views.frame.size.height
        }
    }

    self.scrollView.contentSize = CGSize.init(width: self.scrollView.frame.size.width, height: heightOfSubViews + 50.0) // 50.0 - space b/w controls(30.0) + extras spaces (20.0)
}