การลดช่องว่างระหว่างส่วนต่างๆของ UITableView


141

มีวิธีการลดช่องว่างระหว่างสองส่วนของ UITableView หรือไม่? มีประมาณ 15 พิกเซลระหว่างทุกส่วนที่ฉันมี ฉันได้ลองส่งคืนค่า 0 -tableView:heightForFooterInSection:แล้ว-tableView:heightForHeaderInSection:แต่นั่นไม่เปลี่ยนแปลงอะไรเลย

ข้อเสนอแนะใด ๆ


1
ฉันถูกใช้จัดกลุ่ม tableView และการตั้งค่าความสูงของส่วนหัว / 0.0ท้ายไป แต่มันแสดงพื้นที่สีเทาที่มีความสูง 30 จุด (ค่าเริ่มต้น) การใช้0.0ไม่ได้รับการยอมรับ คุณต้องใช้ค่าใด ๆ ดังกล่าวข้างต้นเช่น0.0 0.0001
ฮันนี่

@Honey ตามที่บอกว่า0.0ไม่ทำงาน ฉันมีคำตอบอย่างละเอียดมากขึ้นสำหรับปัญหาเดียวกันที่นี่: stackoverflow.com/a/22185534/2789144
James Nelson

คำตอบ:


263

มันค่อนข้างยุ่งยาก แต่ลองใช้รหัสนี้:

- (CGFloat)tableView:(UITableView*)tableView 
           heightForHeaderInSection:(NSInteger)section {
    if (section == 0) {
        return 6.0;
    }

    return 1.0;
}

- (CGFloat)tableView:(UITableView*)tableView 
           heightForFooterInSection:(NSInteger)section {
    return 5.0;
}

- (UIView*)tableView:(UITableView*)tableView 
           viewForHeaderInSection:(NSInteger)section {
    return [[UIView alloc] initWithFrame:CGRectZero];
}

- (UIView*)tableView:(UITableView*)tableView 
           viewForFooterInSection:(NSInteger)section {
    return [[UIView alloc] initWithFrame:CGRectZero];
}

เปลี่ยนค่าให้สอดคล้อง เพื่อลบพื้นที่ฉันคิดว่า 0.0 จะไม่ได้รับการยอมรับ ค่าสติน้อยที่สุดน่าจะเป็น 1.0


2
คุณควรกลับ 5.0f แทน 5.0 เนื่องจากความขัดแย้งแบบลอยตัว
LeonS

45
คุณสามารถส่งคืนความสูงได้ 0.00001f และคุณจะได้รับความสูง 0 พิกเซล / คะแนน
Klaas

1
ในฐานะที่เป็น @Klass ชี้ให้เห็นว่าคุณไม่สามารถใช้0เป็นความสูง - คุณจะได้รับความสูงเริ่มต้น
zekel

26
ทำไมไม่ใช้ CGFLOAT_MIN มันทำมาสำหรับชนิดของสถานการณ์ :) เหล่านี้
อังเดรฆา

12
หากใช้สวิฟท์คุณสามารถกลับมาได้CGFloat.leastNonzeroMagnitude
oztune

140

สำหรับทุกคนที่ต้องการลดระยะทางเป็น 0 คุณต้องใช้:

tableView.sectionHeaderHeight = 0.0;
tableView.sectionFooterHeight = 0.0;

เนื่องจากการให้บริการของ UITableViewDelegate จะสร้างผลกระทบที่เริ่มต้นจากการลอยตัวมากกว่าศูนย์เท่านั้น

-(CGFloat)tableView:(UITableView*)tableView heightForHeaderInSection:(NSInteger)section
{
    return 1.0;
}


-(CGFloat)tableView:(UITableView*)tableView heightForFooterInSection:(NSInteger)section
{
    return 1.0;
}

-(UIView*)tableView:(UITableView*)tableView viewForHeaderInSection:(NSInteger)section
{
    return [[[UIView alloc] initWithFrame:CGRectZero] autorelease];
}

-(UIView*)tableView:(UITableView*)tableView viewForFooterInSection:(NSInteger)section
{
    return [[[UIView alloc] initWithFrame:CGRectZero] autorelease];
}

(ใช้ iOS 4.1 กับ XCode 4.0.2)


7
ผลตอบแทน 0.0001; ทำงานให้ฉัน ฉันใช้ xcode 4.6 และ iOS 6.1
Sam

ฉันต้องการคืน CGFLOAT_MIN ในสองวิธีแรกเท่านั้นและใช้งานได้ดี
Julius

แทนการใช้ 0return .leastNormalMagnitude
สแตน

33

คุณสามารถตั้งค่าส่วนท้าย / ส่วนหัว / เซลล์ในเครื่องมือสร้างส่วนติดต่อได้จริงภายใต้แท็บขนาด โดยค่าเริ่มต้นส่วนหัว / ท้ายกระดาษถูกตั้งค่าเป็น 10.0


ฉันคิดว่าพฤติกรรมดังกล่าวได้รับการเพิ่มใน iOS 5.0 หรือ iOS 6.0 แต่ใช่ - ตอนนี้มันง่ายกว่ามากในการตั้งค่าระยะห่างระหว่างกลุ่ม
Vlas Voloshin

2
ฉันรู้ว่ามันเก่า แต่ฉันต้องการที่จะแสดงความคิดเห็นว่าตั้งแต่ XCode 5 และ iOS 7 ดูเหมือนว่า HAS นี้จะต้องทำในรหัส ฉันตั้งค่ามันในเครื่องมือสร้างส่วนต่อประสานเป็น 0 และมันยังคงถูกตั้งค่าเป็น 1 จนกว่าฉันจะตั้งรหัสเป็น 0
Ahmad

ด้วย Xcode 6 และ iOS 8 ดูเหมือนว่าจะใช้งานได้กับการกำหนดค่าในกระดานเรื่องราวเท่านั้น
Murray Sagal

พวกเขากำลังตั้งค่าเป็น 18 บน xcode 7 โดยค่าเริ่มต้น แต่นั่นคือทางออกที่ง่ายที่สุด!
static0886

27

คุณต้องลดความสูงส่วนหัว / ท้ายกระดาษ จากนั้นช่องว่างระหว่างส่วนจะลดลง

ลองรหัสนี้

มันเหมาะกับฉัน :-)

tableView.sectionHeaderHeight = 2.0;
tableView.sectionFooterHeight = 2.0;

21

คุณสามารถลดความสูงของส่วนท้ายและส่วนหัวได้จากกระดานเรื่องราว ใน tableview -> ตัวตรวจสอบขนาด ไปที่ส่วนสูง

ตัวตรวจสอบขนาดสำหรับ UITableView ในกระดานเรื่องราว

โดยค่าเริ่มต้นจะถูกตั้งค่าเป็น 22 สำหรับตารางสไตล์ธรรมดาและ 10 สำหรับตารางสไตล์ที่จัดกลุ่ม คุณสามารถกำหนดค่าโดยการเพิ่ม / ลดค่าสำหรับส่วนหัวและส่วนท้ายแยกกัน


6

สำหรับฉันปัญหาคือเพราะฉันใช้สไตล์มุมมองตารางจัดกลุ่ม ( UITableViewStyleGrouped) เมื่อฉันเปลี่ยนเป็นรูปแบบธรรมดา ( UITableViewStylePlain) tableView:heightForHeaderInSection:วิธีการของฉันเป็นเพียงสิ่งเดียวที่กำหนดขนาดของส่วนหัวของแต่ละส่วน


4

ใช้สิ่งนี้บางที 0 จะไม่ทำงานอย่างที่คาดไว้

func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
     return .leastNormalMagnitude
}

func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
    return .leastNormalMagnitude
}

3

อัปเดตสำหรับ iOS7:เนื่องจากการอัปเดตอัตโนมัติ ARC เนื่องจากนี่คือ @Martin Stolz code ที่แก้ไข

-(CGFloat)tableView:(UITableView*)tableView heightForHeaderInSection:(NSInteger)section
{
    if(section == 0)
        return 6;
    return 1.0;
}

-(CGFloat)tableView:(UITableView*)tableView heightForFooterInSection:(NSInteger)section
{
    return 5.0;
}

-(UIView*)tableView:(UITableView*)tableView viewForHeaderInSection:(NSInteger)section
{
    return [[UIView alloc] initWithFrame:CGRectMake(0, 0, 0, 0)];
}

-(UIView*)tableView:(UITableView*)tableView viewForFooterInSection:(NSInteger)section
{
    return [[UIView alloc] initWithFrame:CGRectMake(0, 0, 0, 0)];
}

(ใช้ iOS7, Xcode v5.0)


0

สำหรับฉันเพียงแค่ปัญหานี้ได้รับการแก้ไขเพียงแค่ใช้รหัสต่อไปนี้

func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
    return section == 0 ? 1 : 20 // 20 is my other sections height
}

การส่งคืน1สำหรับส่วนแรกได้แก้ไขปัญหาแล้ว


0

ในการเปลี่ยนพื้นที่ส่วนหัว / ท้ายกระดาษวิธีการต่อไปนี้จะต้องมีการใช้งาน:

func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView?

และ

func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat

(ใช้วิธีการที่สอดคล้องกันเพื่อเปลี่ยนความสูงส่วนท้าย)

รหัสต่อไปนี้จะลบช่องว่างรอบส่วนอย่างสมบูรณ์:

public func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
    return nil
}

public func tableView(_ tableView: UITableView, viewForFooterInSection section: Int) -> UIView? {
    return nil
}

public func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
    return .leastNonzeroMagnitude
}

public func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
    return .leastNonzeroMagnitude
}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.