Cài đặt Chiều cao hàng tùy chỉnh trong bảng phân cảnh không đáp ứng


213

Tôi đang cố gắng điều chỉnh chiều cao của ô cho một trong các ô trên chế độ xem bảng của mình. Tôi đang điều chỉnh kích thước từ cài đặt "chiều cao hàng" bên trong "trình kiểm tra kích thước" của ô đang đề cập. Khi tôi chạy ứng dụng trên iPhone, ô có kích thước mặc định được đặt từ "kích thước hàng" trong chế độ xem bảng.

Nếu tôi thay đổi "kích thước hàng" của chế độ xem bảng thì kích thước của tất cả các ô sẽ thay đổi. Tôi không muốn làm điều đó vì tôi muốn một kích thước tùy chỉnh chỉ cho một ô. Tôi đã thấy rất nhiều bài viết có một giải pháp lập trình cho vấn đề này, nhưng tôi thích làm điều đó thông qua bảng phân cảnh, nếu điều đó là có thể.

Câu trả lời:


295

Trên các ô động , rowHeightđược đặt trên UITableView luôn ghi đè hàng của các ô riêng lẻ.

Nhưng trên các ô tĩnh , rowHeightđược đặt trên các ô riêng lẻ có thể ghi đè lên các UITableView.

Không chắc chắn nếu đó là một lỗi, Apple có thể cố tình làm điều này?


36
Câu trả lời đúng số 3 và cụ thể vì câu trả lời này áp dụng cho Trình tạo giao diện / Bảng phân cảnh. Nếu bạn chọn ô trong IB, thì Trình kiểm tra kích thước sẽ hiển thị Chiều cao hàng ở trên cùng (với hộp kiểm "tùy chỉnh"), nhưng nếu bạn chọn toàn bộ chế độ xem bảng , Trình kiểm tra kích thước cũng hiển thị Chiều cao hàng ở trên cùng (không có "tùy chỉnh" " trong trường hợp này). Như pixelfreak nói, chỉ có cài đặt chế độ xem bảng được sử dụng cho các ô động. (Không chắc nếu đó là cố ý)
hoàng

8
câu trả lời này ngụ ý rằng các giải pháp sẽ được chỉ đơn giản là để thay đổi UITableViewnội dung từ Dynamic Prototypesđể Static Cells, tôi đã làm điều đó, và toàn bộ dự án của tôi nổ tung .. gần như bị giết bản thân mình.
abbood

4
Có cách nào để lấy lại số này? Có phải cách duy nhất để đào sâu nó lên là lặn vào bảng phân cảnh và kéo nó ra khỏi đó?
Xe đạp

Đây chắc chắn KHÔNG phải là một lỗi, bởi vì bảng của bạn là Động, vậy làm sao hệ thống có thể biết bạn đã sử dụng từng ô đó ở đâu? Và bao nhiêu lần mỗi nguyên mẫu sẽ được sử dụng.
Vincent Bernier

Dường như cũng có vấn đề nếu ban đầu bạn thiết lập chế độ xem bảng dưới dạng "ô tĩnh" và sau đó thay đổi thành "nguyên mẫu động". Tôi đã có một vấn đề trong đó ngay cả phương thức ủy nhiệm cho rowHeight cũng bị bỏ qua. Trước tiên tôi đã giải quyết nó bằng cách trực tiếp chỉnh sửa XML bảng phân cảnh, sau đó cuối cùng chỉ cần xây dựng lại cảnh bảng phân cảnh từ đầu, sử dụng các nguyên mẫu động từ đầu.
Eric Goldberg

84

Nếu bạn sử dụng UITableViewCont kiểm soát, hãy thực hiện phương pháp này:

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath;

Trong chức năng của một hàng, bạn có thể chọn Chiều cao. Ví dụ,

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (indexPath.row == 0) {
       return 100;
    } 
    else {
       return 60;
    }
}

Trong ví dụ này, chiều cao hàng đầu tiên là 100 pixel và các chiều cao khác là 60 pixel.

Tôi hy vọng điều này có thể giúp bạn.


2
Beber, có phải LUÔN LUÔN phải thực hiện cả hai (kiểm tra Tùy chỉnh và chỉnh sửa giá trị Chiều cao Hàng trong bảng phân cảnh && chỉ định nó trong heightForRowAtIndexPath) không?
marciokoko

Bạn có thể giúp tôi về điều này? Tôi cần phải có các ô động với chiều cao động, nhưng nếu tôi sử dụng phương pháp này, không có vấn đề gì tôi trả lại tất cả các ô biến mất. Ngoại trừ trên iPhone 5 , thiết bị hoạt động như mong đợi. Bạn có thể hiểu tại sao không?
Ostmeistro

34

Đối với các ô động, rowHeightđặt trên UITableViewluôn luôn ghi đè các ô riêng lẻ ' rowHeight.

Hành vi này là, IMO, một lỗi. Bất cứ lúc nào bạn phải quản lý giao diện người dùng của mình ở hai nơi dễ bị lỗi. Ví dụ, nếu bạn thay đổi kích thước ô của mình trong bảng phân cảnh, bạn cũng phải nhớ thay đổi chúng heightForRowAtIndexPath:theo. Cho đến khi Apple sửa lỗi, cách giải quyết tốt nhất hiện tại là ghi đè heightForRowAtIndexPath:, nhưng sử dụng các ô nguyên mẫu thực tế từ bảng phân cảnh để xác định chiều cao thay vì sử dụng số ma thuật . Đây là một ví dụ:

- (CGFloat)tableView:(UITableView *)tableView 
           heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    /* In this example, there is a different cell for
       the top, middle and bottom rows of the tableView.
       Each type of cell has a different height.
       self.model contains the data for the tableview 
    */
    static NSString *CellIdentifier;
    if (indexPath.row == 0) 
        CellIdentifier = @"CellTop";
    else if (indexPath.row + 1 == [self.model count] )
        CellIdentifier = @"CellBottom";
    else
        CellIdentifier = @"CellMiddle";

    UITableViewCell *cell = 
              [self.tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    return cell.bounds.size.height;
}

Điều này sẽ đảm bảo mọi thay đổi về chiều cao ô nguyên mẫu của bạn sẽ tự động được chọn khi chạy và bạn chỉ cần quản lý giao diện người dùng của mình ở một nơi: bảng phân cảnh.


2
Tôi đã đăng một câu trả lời với mã đầy đủ bao gồm cả bộ nhớ đệm; xem stackoverflow.com/a/16881312/292166
JosephH

1
Tuyệt tuyệt tuyệt! Tôi nêu lên câu trả lời, nhưng hãy TUYỆT VỜI! Phương pháp này gây ra hình phạt không chỉ hiệu suất như đã nói @Brennan trong các bình luận, nó cũng gây ra sự phân bổ bộ nhớ ngày càng tăng ở mỗi lần tải lạiData giống như rò rỉ bộ nhớ! Cần sử dụng cách giải quyết của lensovet ở trên! Hãy dành một ngày để bắt rò rỉ bộ nhớ này!
skywinder

Không hoạt động trong Swift, vì cell.bound.size.height luôn trả về 0,0
King-Wizard

1
Các ô chưa tồn tại vào thời điểm hệ thống gọi phương thức tableView: heightForRowAtIndexPath của bạn. Bạn phải có khả năng sử dụng indexPath được truyền cho bạn để lập chỉ mục vào mô hình dữ liệu của bạn và xem loại ô nào sẽ được sử dụng ở đó, sau đó tính chiều cao cho ô đó và trả lại. Điều đó cho phép hệ thống bố trí các ô trong bảng trước khi tạo bất kỳ ô nào.
Vua-Pháp sư

1
Ngoài ra, bạn không nên gọi phương thức cellForRowAtIndexPath của riêng bạn. Các khung nhìn bảng có một phương thức cellForRowAtIndexPath sẽ trả về một ô cho đường dẫn chỉ mục đó nếu nó hiện đang hiển thị trên màn hình, nhưng thường thì đường dẫn chỉ mục đó không có một ô được liên kết với nó.
Vua-Pháp sư

22

Tôi đã xây dựng mã các gợi ý câu trả lời / nhận xét khác nhau để nó hoạt động cho các bảng phân cảnh sử dụng các ô nguyên mẫu.

Mã này:

  • Không yêu cầu chiều cao ô được đặt ở bất kỳ nơi nào khác ngoài vị trí rõ ràng trong bảng phân cảnh
  • Lưu trữ chiều cao vì lý do hiệu suất
  • Sử dụng một hàm chung để lấy mã định danh ô cho đường dẫn chỉ mục để tránh logic trùng lặp

Cảm ơn Trả lời, Brennan và lensovet.

- (NSString *)cellIdentifierForIndexPath:(NSIndexPath *)indexPath
{
    NSString *cellIdentifier = nil;

    switch (indexPath.section)
    {
        case 0:
            cellIdentifier = @"ArtworkCell";
            break;
         <... and so on ...>
    }

    return cellIdentifier;
}

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSString *cellIdentifier = [self cellIdentifierForIndexPath:indexPath];
    static NSMutableDictionary *heightCache;
    if (!heightCache)
        heightCache = [[NSMutableDictionary alloc] init];
    NSNumber *cachedHeight = heightCache[cellIdentifier];
    if (cachedHeight)
        return cachedHeight.floatValue;

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];
    CGFloat height = cell.bounds.size.height;
    heightCache[cellIdentifier] = @(height);
    return height;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSString *cellIdentifier = [self cellIdentifierForIndexPath:indexPath];

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier forIndexPath:indexPath];

    <... configure cell as usual...>

Tôi biết đây là một câu trả lời cũ, nhưng có ai khác thấy rằng điều này dẫn đến tràn ngăn xếp không? Khi chế độ xem tải, tôi nhận được UISectionRowData refreshWithSection: tableViewRowData: gọi bảngView: heightForRowAtIndexPath: gọi dequeueReUsCellWithIdentifier: gọi [UISectionRowData ...] Tôi thực sự muốn sử dụng giải pháp này, nhưng dường như nó không hoạt động với iOS7.
sbaker

Không hoạt động trong Swift, vì cell.bound.size.height luôn trả về 0,0
King-Wizard

Các ô chưa tồn tại vào thời điểm hệ thống gọi phương thức tableView: heightForRowAtIndexPath của bạn. Bạn phải có khả năng sử dụng indexPath được truyền cho bạn để lập chỉ mục vào mô hình dữ liệu của bạn và xem loại ô nào sẽ được sử dụng ở đó, sau đó tính chiều cao cho ô đó và trả lại. Điều đó cho phép hệ thống bố trí các ô trong bảng trước khi tạo bất kỳ ô nào.
Vua-Pháp sư

Ngoài ra, bạn không nên gọi phương thức cellForRowAtIndexPath của riêng bạn. Các khung nhìn bảng có một phương thức cellForRowAtIndexPath sẽ trả về một ô cho đường dẫn chỉ mục đó nếu nó hiện rõ trên màn hình, nhưng thường thì đường dẫn chỉ mục đó không có một ô được liên kết với nó.
Vua-Pháp sư

@ snow-tiger Tôi chưa thử điều này nhanh chóng, nhưng tôi không hiểu ý kiến ​​của bạn. Tôi không 'gọi phương thức cellForRowAtIndexPath của riêng tôi' và tôi cố tình không làm điều đó. Tôi cũng biết rằng các ô không tồn tại tại bảng thời gian Xem: heightForRowAtIndexPath được gọi, đó là toàn bộ điểm của mã này và tại sao nó sử dụng dequeueReabilitiesCellWithIdentifier để lấy một ô. Mã được đăng trong câu trả lời này hoạt động. Có một cái gì đó thêm đang diễn ra trong swift, có một cái gì đó không đúng trong chuyển đổi nhanh chóng, hoặc đang cố gắng giải quyết một vấn đề khác mà câu hỏi / câu trả lời này nhắm đến.
JosephH

19

Thực tế, có hai nơi bạn cần thay đổi thành chiều cao hàng, đầu tiên là ô (bạn đã thay đổi điều đó) và bây giờ chọn Chế độ xem bảng và kiểm tra Trình kiểm tra kích thước


trong chế độ xem bảng (không phải ô xem)> trong tab thanh tra kích thước> chiều cao hàng
iman kazemayni

Ổ đĩa cho tôi mỗi lần tôi quên chi tiết này. Không biết tại sao điều chỉnh ô không tự động cập nhật bảngView khi sử dụng bảng phân cảnh!
Xe tay ga

11

Tôi nghĩ đó là một lỗi.

Hãy thử điều chỉnh chiều cao không phải bằng Trình kiểm tra tiện ích mà bằng cách kéo chuột trực tiếp lên bảng phân cảnh.

Tôi đã giải quyết vấn đề này bằng phương pháp này.


10

Nếu bạn đang sử dụng swift, hãy sử dụng như thế này. Không sử dụng bảng phân cảnh để chọn chiều cao hàng. Lập trình chiều cao hàng bảng như thế này,

 func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    if indexPath.row == 0 || indexPath.row == 1{
        let cell = self.tableView.dequeueReusableCellWithIdentifier("section1", forIndexPath: indexPath) as! Section1TableViewCell
        self.tableView.rowHeight = 150
        cell.label1.text = "hiiiiii"
        cell.label2.text = "Huiiilllllll"
        return cell

    } else {

        let cell = self.tableView.dequeueReusableCellWithIdentifier("section2", forIndexPath: indexPath) as! Section2TableViewCell
        self.tableView.rowHeight = 60
        cell.label3.text = "llll"
        return cell
    }

}

Điều này hoạt động, nhưng nói chung hơn bạn có thể làm:cell.sizeToFit(); self.tableView.rowHeight = cell.frame.height
Andy Chou

7

Bạn có thể lấy chiều cao của UITableviewCell (trong UITableviewControll - các ô tĩnh) từ bảng phân cảnh với sự trợ giúp của các dòng sau.

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
   CGFloat height = [super tableView:tableView heightForRowAtIndexPath:indexPath];

    return height;
}

6

Mở bảng phân cảnh trong chế độ xem XML và cố gắng chỉnh sửa rowHeightthuộc tính của phần tử mong muốn.

Nó hoạt động với tôi khi tôi cố gắng đặt hàng tùy chỉnh Độ sáng cho hàng được tạo mẫu của tôi. Nó không hoạt động thông qua trình kiểm tra, nhưng thông qua XML, nó hoạt động.


1
Tôi nhấp chuột phải và chọn "mở dưới dạng" -> "mã nguồn". RowHeight đã được đặt thành 120. Tôi tin rằng bảng phân cảnh có lỗi ở đó và nó bỏ qua chiều cao ô tùy chỉnh.
zirinisp

6

Bạn có thể sử dụng nguyên mẫu cellsvới một tùy chỉnh height, sau đó gọi cellForRowAtIndexPath:và trả lại frame.height.:.

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell = [self tableView:tableView
                    cellForRowAtIndexPath:indexPath];
    return cell.frame.size.height;
}

Việc bổ sung phương pháp này hoạt động rất tốt, và hiện đang giữ tất cả các tùy chỉnh trong bảng phân cảnh như nó nên thuộc về.
nghệ sĩ daspian

Cho đến nay, giải pháp tốt nhất
TheJeff

4

Nếu bạn muốn đặt chiều cao hàng tĩnh, bạn có thể làm một cái gì đó như thế này:

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    return 120;
}

4

Gần đây tôi đã vật lộn với điều này. Vấn đề của tôi là các giải pháp được đăng ở trên bằng heightForRowAtIndexPath:phương pháp sẽ hoạt động cho iOS 7.1 trong Trình mô phỏng nhưng sau đó đã hoàn toàn làm hỏng kết quả bằng cách chuyển sang iOS 8.1.

Tôi bắt đầu đọc thêm về các ô tự kích thước (được giới thiệu trong iOS 8, đọc tại đây ). Rõ ràng là việc sử dụng UITableViewAutomaticDimensionsẽ giúp ích trong iOS 8. Tôi đã thử sử dụng kỹ thuật đó và xóa việc sử dụng heightForRowAtIndexPath:và voila, nó đã hoạt động hoàn hảo trong iOS 8. Nhưng iOS 7 thì không. Tôi phải làm gì đây? Tôi cần heightForRowAtIndexPath:cho iOS 7 chứ không phải cho iOS 8.

Đây là giải pháp của tôi (được cắt xén vì lợi ích của sự ngắn gọn) mà mượn từ câu trả lời @JosephH đã đăng ở trên:

- (void)viewDidLoad {
    [super viewDidLoad];

    self.tableView.estimatedRowHeight = 50.;
    self.tableView.rowHeight = UITableViewAutomaticDimension;

    // ...
}

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"8.0")) {
        return UITableViewAutomaticDimension;

    } else {
        NSString *cellIdentifier = [self reuseIdentifierForCellAtIndexPath:indexPath];
        static NSMutableDictionary *heightCache;
        if (!heightCache)
            heightCache = [[NSMutableDictionary alloc] init];
        NSNumber *cachedHeight = heightCache[cellIdentifier];
        if (cachedHeight)
            return cachedHeight.floatValue;

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];
    CGFloat height = cell.bounds.size.height;
    heightCache[cellIdentifier] = @(height);
    return height;
    }
}

- (NSString *)reuseIdentifierForCellAtIndexPath:(NSIndexPath *)indexPath {
    NSString * reuseIdentifier;
    switch (indexPath.row) {
        case 0:
            reuseIdentifier = EventTitleCellIdentifier;
            break;
        case 2:
            reuseIdentifier = EventDateTimeCellIdentifier;
            break;
        case 4:
            reuseIdentifier = EventContactsCellIdentifier;
            break;
        case 6:
            reuseIdentifier = EventLocationCellIdentifier;
            break;
        case 8:
            reuseIdentifier = NotesCellIdentifier;
            break;
        default:
            reuseIdentifier = SeparatorCellIdentifier;
            break;
    }

    return reuseIdentifier;
}

HỆ THỐNG Chúng được định nghĩa là:

#define SYSTEM_VERSION_EQUAL_TO(v)                  ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedSame)
#define SYSTEM_VERSION_GREATER_THAN(v)              ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedDescending)
#define SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(v)  ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedAscending)
#define SYSTEM_VERSION_LESS_THAN(v)                 ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedAscending)
#define SYSTEM_VERSION_LESS_THAN_OR_EQUAL_TO(v)     ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedDescending)

2

Vấn đề tương tự xảy ra khi làm việc trên XCode 9 bằng Swift 4 .

Thêm AutoLayout cho các thành phần UI bên trong Ô và chiều cao hàng ô tùy chỉnh sẽ hoạt động tương ứng như được chỉ định.


1
Xin chào, làm thế nào bạn làm điều đó?
Quay lại Packer

Bạn chỉ cần thêm một ràng buộc được đặt ở dưới cùng của ô.
Justin

Khi tôi làm điều này và chọn "tự động" trong bảng phân cảnh cho chiều cao của ô, nó muốn đặt tất cả các độ cao thành 44 trong bảng phân cảnh mặc dù nó xuất hiện chính xác khi tôi chạy. Làm thế nào tôi có thể có được bảng phân cảnh để hiển thị chính xác?
David

1

Đối với các ô động, rowHeight được đặt trên UITableView luôn ghi đè lên hàng của các ô riêng lẻ. Chỉ cần tính chiều cao động nếu nội dung bên trong hàng.


0

Giải pháp thực sự duy nhất tôi có thể tìm thấy là đây

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell = ...; // Instantiate with a "common" method you'll use again in cellForRowAtIndexPath:
    return cell.frame.size.height;
}

Điều này hoạt động và cho phép không có một chuyển đổi khủng khiếp / nếu sao chép logic đã có trong StoryBoard. Không chắc chắn về hiệu suất nhưng tôi đoán khi đến trong cellForRow:tế bào đã được kích hoạt thì nó nhanh như vậy. Tất nhiên có thể có thiệt hại tài sản thế chấp ở đây, nhưng có vẻ như nó hoạt động tốt với tôi ở đây.

Tôi cũng đã đăng bài này ở đây: https://devforums.apple.com/message/772464

EDIT: Ortwin Gentz nhắc nhở tôi rằng heightForRowAtIndexPath:sẽ được gọi cho tất cả các ô của TableView, không chỉ các ô hiển thị. Âm thanh hợp lý vì iOS cần biết tổng chiều cao để có thể hiển thị các thanh cuộn bên phải. Điều đó có nghĩa là nó có thể tốt trên các TableView nhỏ (như 20 Cell) nhưng hãy quên nó trên 1000 TableView.

Ngoài ra, thủ thuật trước đây với XML: Tương tự như nhận xét đầu tiên đối với tôi. Giá trị chính xác đã có.


0

Đã thêm dưới dạng nhận xét, nhưng đăng dưới dạng câu trả lời cho khả năng hiển thị:

Dường như cũng có vấn đề nếu ban đầu bạn thiết lập chế độ xem bảng dưới dạng "ô tĩnh" và sau đó thay đổi thành "nguyên mẫu động". Tôi đã có một vấn đề mà ngay cả phương thức đại biểu heightForRowAtIndexPathđã bị bỏ qua. Trước tiên tôi đã giải quyết nó bằng cách trực tiếp chỉnh sửa XML bảng phân cảnh, sau đó cuối cùng chỉ cần xây dựng lại cảnh bảng phân cảnh từ đầu, sử dụng các nguyên mẫu động từ đầu.


0

Cho rằng tôi không tìm thấy bất kỳ giải pháp nào cho vấn đề này thông qua Trình tạo giao diện, tôi quyết định đăng một giải pháp lập trình cho vấn đề trong Swift bằng cách sử dụng hai ô động , mặc dù câu hỏi ban đầu đã yêu cầu giải pháp thông qua Trình tạo giao diện. Bất kể tôi nghĩ nó có thể hữu ích cho cộng đồng Stack Overflow:

    import UIKit

    enum SignInUpMenuTableViewControllerCellIdentifier: String {
       case BigButtonCell = "BigButtonCell"
       case LabelCell = "LabelCell"
    }

    class SignInUpMenuTableViewController: UITableViewController {
            let heightCache = [SignInUpMenuTableViewControllerCellIdentifier.BigButtonCell : CGFloat(50),
                              SignInUpMenuTableViewControllerCellIdentifier.LabelCell : CGFloat(115)]

    private func cellIdentifierForIndexPath(indexPath: NSIndexPath) -> SignInUpMenuTableViewControllerCellIdentifier {
        if indexPath.row == 2 {
            return SignInUpMenuTableViewControllerCellIdentifier.LabelCell
        } else {
            return SignInUpMenuTableViewControllerCellIdentifier.BigButtonCell
        }
    }

   override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
       return self.heightCache[self.cellIdentifierForIndexPath(indexPath)]!
   }

   ...

  }

Điều này hoàn toàn tốt và tốt nhưng trừ khi tôi đọc sai mã, nó chỉ đơn giản dựa vào số ma thuật và hoàn toàn bỏ qua bất kỳ giá trị nào bạn đặt trong IB cho các ô động nên ... không chính xác là một giải pháp cho câu hỏi của OP
Danny

0

Một điều khác bạn có thể làm là đi đến Outline tài liệu của bạn, chọn chế độ xem bảng mà ô nguyên mẫu của bạn được lồng vào nhau. Sau đó, trên Trình kiểm tra kích thước, thay đổi chế độ xem bảng của bạn Chiều cao hàng thành giá trị mong muốn của bạn và bỏ chọn hộp Tự động.

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.