我能够根据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
}
}
或者我在代码中遗漏了一些我没有得到的东西,这个问题可以解决吗?
答案 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)
}