Tất cả các giải pháp hiện tại không hoạt động đối với tôi trên iOS 8 khi không có đủ hàng để lấp đầy tableView vì iOS sẽ tự động điều chỉnh nội dung trong trường hợp này. (Mặc dù vậy, các câu trả lời hiện tại là tốt khi có đủ hàng)
Sau khi lãng phí 6 giờ cho vấn đề này, cuối cùng tôi đã có giải pháp này.
Tóm lại, bạn cần phải chèn các ô trống vào tableView nếu không có đủ ô, vì vậy kích thước nội dung của tableView đủ lớn để iOS sẽ không điều chỉnh inset cho bạn.
Đây là cách tôi đã làm điều đó trong Swift:
1.) khai báo một biến minimumCellNum
dưới dạng thuộc tính lớp
var minimumCellNum: Int?
2.) tính toán minimumCellNum
và thiết lập tableView.contentOffset
trongviewWillAppear
let screenHeight = Int(UIScreen.mainScreen().bounds.height)
self.minimumCellNum = (screenHeight - 103 - heightOfOtherCustomView) / heightOfYourCell
self.tableView.contentOffset = CGPointMake(0, 44)
3 trong tableView(tableView: UITableView, numberOfRowsInSection section: Int))
let numOfYourRows = YOUR LOGIC
if numOfYourRows > minimumCellNum {
return numOfYourRows
} else {
return minimumCellNum!
}
4.) Đăng ký một ô trống, có selection
thuộc tính None
, trên bảng phân cảnh và trongtableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath)
if indexPath.row < numOfYourRows {
return YOUR CUSTOM CELL
} else {
let cell = tableView.dequeueReusableCellWithIdentifier("EmptyCell", forIndexPath: indexPath) as! UITableViewCell
return cell
}
5.) trong tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath)
if tableView == self.tableView {
if numOfYourRows < (indexPath.row + 1) {
return
}
YOUR LOGIC OF SELECTING A CELL
}
Đây không phải là một giải pháp hoàn hảo, nhưng đó là cách giải quyết duy nhất thực sự phù hợp với tôi trên iOS 8. Tôi muốn biết liệu có giải pháp nào gọn gàng hơn không.