UITableView + Thêm phần bù nội dung ở trên cùng


86

Tôi cần thêm một số không gian trống vào đầu UITableView của mình để không ảnh hưởng đến kích thước của vùng nội dung. Chuyển nội dung xuống hoặc thêm một ô trống KHÔNG phải là điều tôi muốn làm. Thay vào đó tôi chỉ muốn một sự bù đắp.

Làm sao?

Câu trả lời:


288

Tôi không chắc liệu tôi có đang theo dõi bạn hay không nhưng tôi nghĩ rằng tôi đang gặp tình trạng khó khăn tương tự. Trong trường hợp của tôi, tôi phải cung cấp một số không gian cho ADBannerView ở đầu màn hình, vì vậy những gì tôi đã làm là trong phương thức viewDidLoad mà tôi đã thêm:

[self.tableView setContentInset:UIEdgeInsetsMake(50,0,0,0)];

các giá trị nó nhận là UIEdgeInsetsMake (trên cùng, trái, dưới, phải).

Ngoài ra, tương tự với Swift:

self.tableView.contentInset = UIEdgeInsetsMake(50, 0, 0, 0)

Swift 4.2:

self.tableView.contentInset = UIEdgeInsets(top: 50, left: 0, bottom: 0, right: 0)

1
Cần điều này để không hiển thị ô "đang tải" ở trên cùng, chuyển đổi trở lại trang trí bản ngã khi ô đó được hiển thị, quay lại -50 trên cùng khi xảy ra tải lại Dữ liệu. cảm ơn !
Daniel

23
Bạn cũng có thể muốn điều chỉnh chỉ báo cuộn: [self.tableView setScrollIndicatorInsets: UIEdgeInsetsMake (50,0,0,0)];
bdev

8
Đúng, hoặc thậm chí tốt hơn, điều chỉnh chỉ báo cuộn như sau: [self.tableView setScrollIndicatorInsets: [self.tableView contentInset]];
David Hernandez

5

Bạn có thể thêm chế độ xem tiêu đề "trống" vào bảng ... điều này sẽ cung cấp cho giao diện ban đầu của bảng có phần bù, nhưng khi bạn bắt đầu cuộn thì phần bù sẽ biến mất. KHÔNG chắc đó là những gì bạn muốn.

Nếu bạn cần một phần bù đắp vĩnh viễn và chưa sử dụng tiêu đề phần, thì bạn có thể tạo phần bù tương tự như trên bằng cách tạo các chế độ xem tùy chỉnh cho tiêu đề phần, đặc biệt nếu bạn chỉ có một phần, điều này có thể cung cấp cho bạn giao diện của phần bù vĩnh viễn .

Tôi có thể đăng mã mẫu nếu có vẻ như một trong hai mã đó là những gì bạn đang tìm kiếm.


4

Tôi kết hợp câu trả lời của Jigzat với:

[self.tableView scrollRectToVisible:CGRectMake(0, 0, 320, 1) animated:NO];

trong

- (void)viewDidLoad

vì vậy ô đầu tiên không ở trên cùng.


4

Swift 5.1

thêm phần sau vào viewDidLoad

tableView.contentInset.top = 100

Thực sự đó là tất cả những gì cần làm.

override func viewDidLoad() {
    super.viewDidLoad()
    tableView.contentInset.top = 100
}

2

Có vẻ như bạn muốn bao bọc một 'Chế độ xem' xung quanh mình UITableView. Nếu bạn có UITableViewControllerIB, UITableViewsẽ tự động được đặt thành viewcủa UITableViewController. Bạn thay đổi thuộc viewtính thành bình thường UIViewvà thêm của bạn UITableViewvào đó và bù đắp cho nó.

--- Chỉnh sửa --- Tôi chỉ mới đọc bài đăng của mình và nghĩ rằng nó có ý nghĩa nhỏ :) Khi bạn tạo một bài viết, UITableViewControllerbạn nhận được điều này (trong mã giả):

UITableViewController.view = UITableView

Điều này có nghĩa là bảng thực tế sẽ chiếm toàn bộ không gian và bạn thậm chí không thể thêm các chế độ xem khác. Vì vậy, bạn cần thay đổi

UITableViewController.view = UIView

và thêm bảng của bạn vào đó UIView


0

Tôi đã kết hợp câu trả lời này với câu trả lời sau: https://stackoverflow.com/a/9450345/1993937

Để làm cho tableView xuất hiện ở đầu nội dung, vì vậy không gian ở trên cùng không bị cắt bằng cách cuộn tableView xuống một chút khi chế độ xem ban đầu xuất hiện. (18 là khoảng cách cao nhất của tôi)

[self.tableView setContentInset:UIEdgeInsetsMake(18,0,0,0)];
[self.tableView setContentOffset:
 CGPointMake(0, -self.songListTable.contentInset.top) animated:YES];
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.