Chiều cao mặc định cho tiêu đề phần trong UITableView


125

Tôi muốn đặt chiều cao của tiêu đề đầu tiên trong UITableView của mình. Đối với các tiêu đề khác, tôi muốn chúng vẫn giữ nguyên chiều cao mặc định. Giá trị / hằng số nào tôi có thể đặt thay cho "someDefaultHeight" trong mã bên dưới?

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

    return someDefaultHeight;
}

Cảm ơn


Tại sao bạn không thử các giá trị khác nhau cho đến khi bạn cảm thấy hài lòng?
Daniel

4
@Daniel - nếu Apple từng quyết định thay đổi giá trị chiều cao hàng mặc định thì tôi cần đảm bảo rằng ứng dụng của tôi không mã hóa giá trị này (với một số tiền tùy ý). Tốt nhất là lấy thông tin này ra khỏi hằng số nếu nó được khai báo ở đâu đó.
kiềm chế

Câu trả lời:


204

Trong iOS 5.0 trở đi, bạn có thể trả về UITableViewAutomaticDimension trong hầu hết các phương thức ủy nhiệm. Nó ở dưới cùng của trang tài liệu

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

1
hmm .. Đối với tôi UITableViewAutomaticDimensiontrả về -1(const mã hóa cứng) và tôi không thấy bất kỳ phần nào trong tôi UITableView.
skywinder

Tại sao UITableViewAutomaticDimensionhiển thị -1 khi NSLognó?
S1U

30
Điều này chỉ hoạt động khi bạn sử dụng khu vực: - (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)sectionnếu bạn đang thực hiện - (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)sectionphương pháp, điều này không hoạt động.
SuperSaiyen

2
Điều đáng chú ý, nếu bạn thực hiện điều này và phương pháp đại biểu ước tính và trả về UITableViewAutomaticDimensionthì nó sẽ có chiều cao bằng không.
Sam Soffes

4
@SuperSaiyen - Nó hoạt động với viewForHeaderInSectionbạn chỉ cần đặtestimatedSectionHeaderHeight
Robert

48

Từ việc kiểm tra mặc định trong ứng dụng của tôi, có vẻ như đối với bảng được nhóm, mặc định là chiều cao 22 và đối với bảng không được nhóm, mặc định là chiều cao là 10.

Nếu bạn kiểm tra giá trị của phần thuộc tínhHeadHeight trên bảng xem của bạn sẽ cho bạn biết.


1
Cảm ơn ... Tôi sẽ mã hóa nó để làm điều này. Mặc dù tôi muốn có một hằng số cho giá trị này.
kiềm chế

3
Bạn có những điều ngược lại. UITableViewStyleGroupedlà 22 và UITableViewStylePlainlà 10.
Michael Grinich

25

Thực sự là lừa :)

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

2
Tôi nghĩ bạn có nghĩa là return [self.tableView sectionHeaderHeight];, hoặc tốt hơn , return [tableView sectionHeaderHeight];. Tuy nhiên, cả hai trả về -1 cho tôi, có lẽ vì tôi không sử dụng ngòi hoặc bảng phân cảnh.
jk7

7

Để hoàn thiện: trong iOS7 + chiều cao cho các tiêu đề phần kiểu được nhóm là 55.5dành cho các tiêu đề đầu tiên và 38sau. (được đo bằng DCIntrospect)


4

Đối với swift 4.2, bạn nên trả về UITableView.automaticDimension


2

Tôi không chắc câu trả lời đúng ở đây là gì, nhưng 10 hoặc 22 dường như không phải là chiều cao chính xác cho chế độ xem bảng được nhóm trong iOS 5. Tôi đang sử dụng 44, dựa trên câu hỏi này và ít nhất nó có vẻ như khoảng chiều cao chính xác.


2

Để có được chiều cao mặc định, chỉ cần superxử lý nó:

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

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

[super tableView:tableView heightForHeaderInSection:section];trả về 0 cho tôi, có lẽ vì tôi không sử dụng ngòi hoặc bảng phân cảnh.
jk7

1
Điều này chỉ hoạt động nếu bạn đang phân lớp UITableViewControll.
Wallace

-1

cái này cần phải dùng mẹo

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

tôi nghĩ ý bạn làreturn [self sectionHeaderHeight];
TMB

@TMB [self sectionHeaderHeight];tạo ra lỗi. Ý bạn là [tableView sectionHeaderHeight];sao
jk7
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.