Tôi muốn chia sẻ một số mã mà tôi đã viết để giải quyết vấn đề này sau khi đào nhiều câu trả lời và gặp nhiều lỗi. Điều này là dành cho xCode 7.2.1. (Ví dụ về mã trong Swift)
Trường hợp sử dụng của tôi là tôi muốn sử dụng tính năng TableView được nhóm tĩnh một cách dễ dàng, nhưng tôi cần ẩn các phần cụ thể dựa trên hồ sơ người dùng. Để thực hiện công việc này (như được mô tả trong các bài viết khác), tôi cần phải ẩn đầu trang và chân trang, các hàng trong phần AND ẩn văn bản đầu trang/chân trang (ít nhất là ở phần trên cùng). Tôi thấy rằng nếu tôi không ẩn (làm trong suốt) văn bản thì người dùng có thể cuộn lên trên đầu bảng (trong Trình điều khiển Điều hướng) và xem văn bản tất cả được nhồi nhét lại với nhau.
Tôi muốn thực hiện điều này dễ dàng để sửa đổi và không muốn điều kiện lây lan qua mã của tôi, vì vậy tôi đã tạo ra một hàm duy nhất gọi là shouldHideSection (phần: Int) là hàm duy nhất tôi phải thay đổi để sửa đổi các hàng nào Đang ẩn.
func shouldHideSection(section: Int) -> Bool {
switch section {
case 0: // Hide this section based on condition below
return user!.isProvider() ? false : true
case 2:
return someLogicForHiddingSectionThree() ? false : true
default:
return false
}
}
Bây giờ phần còn lại của mã chỉ gọi shouldHideSection().
// Hide Header(s)
override func tableView(tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
return shouldHideSection(section) ? 0.1 : super.tableView(tableView, heightForHeaderInSection: section)
}
// Hide footer(s)
override func tableView(tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
return shouldHideSection(section) ? 0.1 : super.tableView(tableView, heightForFooterInSection: section)
}
// Hide rows in hidden sections
override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
return shouldHideSection(indexPath.section) ? 0 : super.tableView(tableView, heightForRowAtIndexPath: indexPath)
}
// Hide header text by making clear
override func tableView(tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int) {
if shouldHideSection(section) {
let headerView = view as! UITableViewHeaderFooterView
headerView.textLabel!.textColor = UIColor.clearColor()
}
}
// Hide footer text by making clear
override func tableView(tableView: UITableView, willDisplayFooterView view: UIView, forSection section: Int) {
if shouldHideSection(section) {
let footerView = view as! UITableViewHeaderFooterView
footerView.textLabel!.textColor = UIColor.clearColor()
}
}
Tôi đã thử nghiệm với nhiều giá trị khác nhau (trả về 0, 0,1, -1, ...) để có được giải pháp thỏa đáng (ít nhất trên iOS 9.x).
Tôi hy vọng điều này hữu ích, hãy cho tôi biết nếu bạn đã đề xuất cải tiến.
mục đích cố gắng để làm một bảng tĩnh năng động là gì? Đó là những gì các bảng động. –
Ý tưởng của tôi là triển khai nó trong ứng dụng phức tạp, phức tạp hơn và ở đó tôi không thể chuyển đổi mọi thứ thành năng động, tuy nhiên tôi đã giải quyết được (nhiều hơn hoặc ít hơn)! –