ความสูงเริ่มต้นสำหรับส่วนหัวใน UITableView


125

ฉันต้องการตั้งค่าความสูงของส่วนหัวแรกใน UITableView ของฉัน สำหรับส่วนหัวอื่น ๆ ฉันต้องการให้ยังคงเป็นความสูงเริ่มต้น ฉันสามารถใส่ค่า / ค่าคงที่ใดแทน "someDefaultHeight" ในโค้ดด้านล่างได้

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

    return someDefaultHeight;
}

ขอบคุณ


ทำไมคุณไม่ลองใช้ค่าที่แตกต่างกันจนกว่าคุณจะได้รับสิ่งที่คุณพอใจ?
Daniel

4
@ แดเนียล - หาก Apple เคยตัดสินใจเปลี่ยนค่าความสูงของแถวเริ่มต้นฉันต้องแน่ใจว่าแอปของฉันไม่ฮาร์ดโค้ดค่านี้ (เป็นจำนวนที่กำหนดเอง) เป็นการดีที่สุดที่จะดึงข้อมูลนี้ออกจากค่าคงที่หากมีการประกาศไว้ที่ไหนสักแห่ง
บังเหียน

คำตอบ:


204

ใน iOS 5.0 เป็นต้นไปคุณสามารถคืนค่า UITableViewAutomaticDimension ได้ในวิธีการมอบหมายส่วนใหญ่ ที่ด้านล่างของหน้าเอกสาร

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
    if(section == CUSTOM_SECTION)
    {
        return CUSTOM_VALUE;
    }
    return UITableViewAutomaticDimension;
}

1
อืม .. สำหรับฉันUITableViewAutomaticDimensionส่งคืน-1(const ฮาร์ดโค้ด) และฉันไม่เห็นส่วนใดเลยในUITableViewไฟล์.
skywinder

ทำไมUITableViewAutomaticDimensionแสดง -1 เมื่อNSLogมัน?
S1U

30
สิ่งนี้ใช้ได้เฉพาะเมื่อคุณใช้พื้นที่: - (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)sectionหากคุณใช้- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)sectionวิธีนี้จะไม่ได้ผล
SuperSaiyen

2
เป็นที่น่าสังเกตว่าหากคุณใช้วิธีนี้และวิธีการมอบสิทธิ์โดยประมาณและส่งคืนUITableViewAutomaticDimensionจะมีความสูงเป็นศูนย์
Sam Soffes

4
@SuperSaiyen - ใช้งานได้กับviewForHeaderInSectionคุณเพียงแค่ต้องตั้งค่าestimatedSectionHeaderHeight
Robert

48

จากการตรวจสอบค่าเริ่มต้นในแอปของฉันดูเหมือนว่าตารางที่จัดกลุ่มไว้ค่าเริ่มต้นคือความสูง 22 และสำหรับตารางที่ไม่ได้จัดกลุ่มค่าเริ่มต้นคือความสูง 10

หากคุณตรวจสอบค่าของคุณสมบัติ sectionHeaderHeight บน tableview ของคุณที่ควรบอกคุณ


1
ขอบคุณ ... ฉันจะแก้ไขรหัสนี้ให้ยาก แม้ว่าฉันหวังว่าจะมีค่าคงที่สำหรับค่านี้
บังเหียน

3
คุณมีสิ่งเหล่านี้อยู่ข้างหลัง UITableViewStyleGroupedคือ 22 และUITableViewStylePlain10
Michael Grinich

25

เคล็ดลับทำจริง :)

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
    if(section == 0)
        return kFirstSectionHeaderHeight;
    return [self sectionHeaderHeight];
}

2
ฉันคิดว่าคุณหมายหรือดีกว่ายังreturn [self.tableView sectionHeaderHeight]; return [tableView sectionHeaderHeight];อย่างไรก็ตามทั้งคู่คืนค่า -1 ให้ฉันบางทีอาจเป็นเพราะฉันไม่ได้ใช้ปลายปากกาหรือสตอรี่บอร์ด
jk7

7

เพื่อความสมบูรณ์: ใน iOS7 + ความสูงสำหรับส่วนหัวของสไตล์ที่จัดกลุ่มไว้สำหรับส่วนหัว55.5แรกและ38สำหรับส่วนหัวต่อไปนี้ (วัดด้วย DCIntrospect)



2

ฉันไม่แน่ใจว่าคำตอบที่ถูกต้องคืออะไร แต่ดูเหมือนว่า 10 หรือ 22 จะไม่เป็นความสูงที่ถูกต้องสำหรับมุมมองตารางที่จัดกลุ่มใน iOS 5 ฉันใช้ 44 ตามคำถามนี้และอย่างน้อยก็ดูเหมือนจะประมาณ ความสูงที่ถูกต้อง


2

ในการรับความสูงเริ่มต้นเพียงแค่ให้superจัดการ:

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

    return [super tableView:tableView heightForHeaderInSection:section];
}

[super tableView:tableView heightForHeaderInSection:section];ส่งคืน 0 ให้ฉันบางทีอาจเป็นเพราะฉันไม่ได้ใช้ปลายปากกาหรือสตอรี่บอร์ด
jk7

1
สิ่งนี้ใช้ได้เฉพาะเมื่อคุณกำลังคลาสย่อย UITableViewController
Wallace

-1

นี้ควรทำเคล็ดลับ

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    if(indexPath.section == CUSTOM_SECTION)
    {
        return CUSTOM_VALUE;
    }
    return [tableView rowHeight];
}

ฉันคิดว่าคุณหมายถึงreturn [self sectionHeaderHeight];
TMB

@TMB [self sectionHeaderHeight];เกิดข้อผิดพลาด คุณหมายถึง[tableView sectionHeaderHeight];?
jk7
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.