UITableView + เพิ่มการชดเชยเนื้อหาที่ด้านบน


86

ฉันต้องการเพิ่มพื้นที่ว่างที่ด้านบนของ UITableView ซึ่งไม่มีผลต่อขนาดของพื้นที่เนื้อหา การเลื่อนเนื้อหาลงหรือเพิ่มเซลล์ว่างไม่ใช่สิ่งที่ฉันต้องการทำ แต่ฉันต้องการชดเชย

อย่างไร?

คำตอบ:


289

ฉันไม่แน่ใจว่าฉันกำลังติดตามคุณอยู่หรือเปล่า แต่ฉันคิดว่าฉันมีสถานการณ์เดียวกัน ในกรณีของฉันฉันต้องให้พื้นที่กับ ADBannerView ที่ด้านบนของหน้าจอดังนั้นสิ่งที่ฉันทำก็คือในเมธอด viewDidLoad ที่ฉันเพิ่ม:

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

ค่าที่ใช้คือ UIEdgeInsetsMake (บนซ้ายล่างขวา)

หรือเหมือนกันกับ 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
จำเป็นต้องใช้สิ่งนี้เพื่อไม่ให้แสดงเซลล์ "กำลังโหลด" ที่ด้านบนสลับกลับไปที่การใส่อัตตาเมื่อเซลล์นั้นแสดงผลกลับไปที่ -50 ด้านบนเมื่อเกิด reloadData ขอบคุณ!
Daniel

23
คุณอาจต้องการปรับตัวบ่งชี้การเลื่อนด้วย: [self.tableView setScrollIndicatorInsets: UIEdgeInsetsMake (50,0,0,0)];
bdev

8
ใช่หรือดีกว่านั้นให้ปรับตัวบ่งชี้การเลื่อนดังนี้: [self.tableView setScrollIndicatorInsets: [self.tableView contentInset]];
David Hernandez

5

คุณสามารถเพิ่มมุมมองส่วนหัว "ว่าง" ลงในตารางได้ ... ซึ่งจะทำให้ลักษณะเริ่มต้นของตารางมีค่าออฟเซ็ต แต่เมื่อคุณเริ่มเลื่อนค่าออฟเซ็ตก็จะหายไป ไม่แน่ใจว่าเป็นสิ่งที่คุณต้องการ

หากคุณต้องการออฟเซ็ตถาวรและยังไม่ได้ใช้ส่วนหัวของส่วนคุณสามารถสร้างออฟเซ็ตได้เหมือนกับด้านบนโดยสร้างมุมมองที่กำหนดเองสำหรับส่วนหัวของส่วนโดยเฉพาะอย่างยิ่งถ้าคุณมีเพียงส่วนเดียวสิ่งนี้อาจทำให้คุณได้เห็นออฟเซ็ตถาวร .

ฉันสามารถโพสต์โค้ดตัวอย่างได้หากดูเหมือนว่าข้อใดข้อหนึ่งคือสิ่งที่คุณกำลังมองหา


4

ฉันรวมคำตอบของ Jigzat เข้ากับ:

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

ใน

- (void)viewDidLoad

เซลล์แรกจึงไม่อยู่ด้านบนสุด


4

สวิฟต์ 5.1

เพิ่มสิ่งต่อไปนี้ใน viewDidLoad

tableView.contentInset.top = 100

นั่นคือทั้งหมดที่มีให้จริงๆ

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

2

ดูเหมือนว่าคุณต้องการปิด "View" ไว้รอบ ๆUITableViewไฟล์. หากคุณมีUITableViewControllerใน IB UITableViewโดยอัตโนมัติจะถูกตั้งค่าของview UITableViewControllerคุณเปลี่ยนviewคุณสมบัติเป็นปกติUIViewและเพิ่มของคุณที่UITableViewนั่นและให้ค่าชดเชย

--- แก้ไข --- ฉันเพิ่งอ่านโพสต์ของฉันและคิดว่ามันสมเหตุสมผลดี :) เมื่อคุณสร้างUITableViewControllerคุณจะได้รับสิ่งนี้ (ในรหัสหลอก):

UITableViewController.view = UITableView

ซึ่งหมายความว่าตารางจริงจะใช้พื้นที่ทั้งหมดและคุณไม่สามารถเพิ่มมุมมองอื่น ๆ ได้ ดังนั้นคุณต้องเปลี่ยนไฟล์

UITableViewController.view = UIView

และเพิ่มตารางของคุณลงในนั้น UIView


0

ฉันรวมคำตอบนี้เข้ากับคำตอบนี้: https://stackoverflow.com/a/9450345/1993937

ในการทำให้ tableView ปรากฏที่ด้านบนของสิ่งที่ใส่ในเนื้อหาดังนั้นพื้นที่ด้านบนจะไม่ถูกตัดออกโดยให้ tableView เลื่อนลงเล็กน้อยเมื่อมุมมองเริ่มปรากฏขึ้น (18 คือช่องว่างบนสุดของฉัน)

[self.tableView setContentInset:UIEdgeInsetsMake(18,0,0,0)];
[self.tableView setContentOffset:
 CGPointMake(0, -self.songListTable.contentInset.top) animated:YES];
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.