Chiều cao ô động UITableView chỉ chính xác sau một số lần cuộn


117

Tôi có một UITableViewtùy chỉnh UITableViewCellđược xác định trong bảng phân cảnh bằng cách sử dụng bố cục tự động. Ô có nhiều dòng UILabels.

UITableViewvẻ như để tính toán đúng chiều cao của ô, nhưng đối với một số ô đầu tiên, chiều cao không được phân chia đúng giữa các nhãn. Sau khi cuộn một chút, mọi thứ hoạt động như mong đợi (ngay cả những ô ban đầu không chính xác).

- (void)viewDidLoad {
    [super viewDidLoad]
    // ...
    self.tableView.rowHeight = UITableViewAutomaticDimension;
}


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    TableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:@"TestCell"];
    // ...
    // Set label.text for variable length string.
    return cell;
}

Có điều gì tôi có thể thiếu khiến bố cục tự động không thể thực hiện công việc của nó trong vài lần đầu tiên không?

Tôi đã tạo một dự án mẫu thể hiện hành vi này.

Dự án mẫu: Chế độ xem trên cùng của bảng từ dự án mẫu trong lần tải đầu tiên. Dự án mẫu: Các ô giống nhau sau khi cuộn xuống và sao lưu.


1
Tôi cũng phải đối mặt với vấn đề này, nhưng câu trả lời dưới đây là không làm việc cho tôi, Bất kỳ giúp đỡ về vấn đề này
Shangari C

1
đối mặt với vấn đề tương tự, thêm layoutIfNeeded cho ô cũng không hoạt động với tôi? bất kỳ đề xuất nào khác
Tối đa

1
Vị trí tuyệt vời. Đây vẫn là một vấn đề trong năm 2019: /
Fattie

Tôi đã tìm thấy những gì đã giúp tôi trong liên kết sau - đó là một cuộc thảo luận khá toàn diện về các ô xem bảng có chiều cao thay đổi: stackoverflow.com/a/18746930/826946
Andy Weinstein

Câu trả lời:


139

Tôi không biết điều này có được ghi lại rõ ràng hay không, nhưng việc thêm [cell layoutIfNeeded]trước khi trả về ô sẽ giải quyết được vấn đề của bạn.

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    TableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:@"TestCell"];
    NSUInteger n1 = firstLabelWordCount[indexPath.row];
    NSUInteger n2 = secondLabelWordCount[indexPath.row];
    [cell setNumberOfWordsForFirstLabel:n1 secondLabel:n2];

    [cell layoutIfNeeded]; // <- added

    return cell;
}

3
Tôi tự hỏi, tại sao nó chỉ cần thiết cho lần đầu tiên? Nó hoạt động tốt nếu tôi đặt cuộc gọi đến -layoutIfNeededtrong phòng giam -awakeFromNib. Tôi chỉ muốn gọi layoutIfNeededở nơi tôi biết tại sao lại cần.
blackp

2
Đã làm cho tôi! Và tôi rất muốn biết tại sao nó lại được yêu cầu!
Mustafa

Không làm việc nếu bạn render lớp kích thước, mà khác nhau từ bất kỳ X bất kỳ
Andrei Konstantinov

@AndreyKonstantinov Yup nó không hoạt động với size class, làm cách nào để làm cho nó hoạt động với size class?
z22

Nó hoạt động mà không có lớp kích thước, bất kỳ giải pháp nào với lớp kích thước?
Yuvrajsinh

38

Điều này hiệu quả với tôi khi các giải pháp tương tự khác không:

override func didMoveToSuperview() {
    super.didMoveToSuperview()
    layoutIfNeeded()
}

Đây có vẻ như là một lỗi thực sự vì tôi đã rất quen thuộc với AutoLayout và cách sử dụng UITableViewAutomaticDimension, tuy nhiên, thỉnh thoảng tôi vẫn gặp sự cố này. Tôi rất vui vì cuối cùng đã tìm thấy thứ gì đó hoạt động như một giải pháp thay thế.


1
Tốt hơn câu trả lời được chấp nhận vì nó chỉ được gọi khi ô đang được tải từ xib thay vì mọi hiển thị ô. Ít dòng mã quá.
Robert Wagstaff,

3
Đừng quên gọisuper.didMoveToSuperview()
cicerocamargo

@cicerocamargo Apple nói về didMoveToSuperview: "Việc triển khai mặc định của phương pháp này không làm gì cả."
Ivan Smetanin

4
@IvanSmetanin không thành vấn đề nếu việc triển khai mặc định không làm được gì, bạn vẫn nên gọi phương thức siêu vì nó thực sự có thể làm được điều gì đó trong tương lai.
TNguyen

(Chỉ cần btw bạn nên DEFINITELY gọi là super. Trên cái đó. Tôi chưa bao giờ thấy một dự án nào mà nhóm nói chung không phân lớp nhiều hơn một lần ô, vì vậy, tất nhiên bạn phải chắc chắn chọn tất cả chúng. VÀ như một vấn đề riêng biệt chỉ những gì TNguyen đã nói.)
Fattie

22

Việc thêm [cell layoutIfNeeded]vào cellForRowAtIndexPathkhông hoạt động đối với các ô ban đầu được cuộn ngoài chế độ xem.

Cũng không mở đầu nó với [cell setNeedsLayout].

Bạn vẫn phải cuộn các ô nhất định ra ngoài và quay lại chế độ xem để chúng thay đổi kích thước một cách chính xác.

Điều này khá khó chịu vì hầu hết các nhà phát triển đều có Dynamic Type, AutoLayout và Self-Sizing Cells hoạt động bình thường - ngoại trừ trường hợp khó chịu này. Lỗi này ảnh hưởng đến tất cả các bộ điều khiển chế độ xem bảng "cao hơn" của tôi.


Tương tự cho tôi. khi tôi cuộn lần đầu tiên, kích thước của ô là 44px. nếu tôi cuộn để làm cho ô khuất tầm nhìn và quay trở lại, nó có kích thước phù hợp. Bạn đã tìm ra được giải pháp nào chưa?
Tối đa

Cảm ơn bạn @ ashy_32bit, điều này cũng giải quyết được nó cho tôi.
ImpurestClub

Nó có vẻ là một lỗi đơn giản, @Scenario phải không? thứ khủng khiếp.
Fattie

3
Sử dụng [cell layoutSubviews]thay vì layoutIfNeeded có thể khắc phục được. Tham khảo stackoverflow.com/a/33515872/1474113
ypresto

14

Tôi đã có kinh nghiệm tương tự trong một trong những dự án của mình.

Tại sao nó xảy ra?

Ô được thiết kế trong Bảng phân cảnh với một số chiều rộng cho một số thiết bị. Ví dụ 400px. Ví dụ: nhãn của bạn có cùng chiều rộng. Khi tải từ bảng phân cảnh, nó có chiều rộng 400px.

Đây là một vấn đề:

tableView:heightForRowAtIndexPath: được gọi trước khi bố trí ô đó là lượt xem phụ.

Vì vậy, nó đã tính toán chiều cao cho nhãn và ô có chiều rộng 400px. Nhưng bạn chạy trên thiết bị có màn hình, ví dụ: 320px. Và chiều cao được tính toán tự động này không chính xác. Chỉ vì ô layoutSubviewschỉ xảy ra sau tableView:heightForRowAtIndexPath: Ngay cả khi bạn đặt preferredMaxLayoutWidthcho nhãn của mình theo cách thủ công tronglayoutSubviews đó cũng không hữu ích.

Giải pháp của tôi:

1) Phân lớp UITableViewvà ghi đè dequeueReusableCellWithIdentifier:forIndexPath:. Đặt chiều rộng ô bằng chiều rộng bảng và bố cục của ô buộc.

- (UITableViewCell *)dequeueReusableCellWithIdentifier:(NSString *)identifier forIndexPath:(NSIndexPath *)indexPath {
    UITableViewCell *cell = [super dequeueReusableCellWithIdentifier:identifier forIndexPath:indexPath];
    CGRect cellFrame = cell.frame;
    cellFrame.size.width = self.frame.size.width;
    cell.frame = cellFrame;
    [cell layoutIfNeeded];
    return cell;
}

2) Lớp con UITableViewCell. Đặt preferredMaxLayoutWidththủ công cho các nhãn của bạn trong layoutSubviews. Ngoài ra, bạn cần bố cục theo cách thủ công contentView, vì nó không tự động bố cục sau khi thay đổi khung ô (tôi không biết tại sao, nhưng nó là như vậy)

- (void)layoutSubviews {
    [super layoutSubviews];
    [self.contentView layoutIfNeeded];
    self.yourLongTextLabel.preferredMaxLayoutWidth = self.yourLongTextLabel.width;
}

1
Khi tôi gặp sự cố này, tôi cũng cần đảm bảo khung của chế độ xem bảng là chính xác, vì vậy tôi đã gọi [self.tableview layoutIfNeeded] trước khi chế độ xem bảng được điền (trong viewDidLoad).
GK100

Tôi không bao giờ ngừng nghĩ rằng nó phải làm với một chiều rộng không chính xác. cell.frame.size.width = tableview.frame.widthsau đó cell.layoutIfNeeded()trong cellForRowAtchức năng đã thực hiện thủ thuật cho tôi
Cam Connor

10

Tôi gặp sự cố tương tự, ở lần tải đầu tiên, chiều cao của hàng không được tính toán nhưng sau một số lần cuộn hoặc chuyển đến màn hình khác và tôi quay lại màn hình này thì hàng được tính. Ở lần tải đầu tiên, các mục của tôi được tải từ internet và ở lần tải thứ hai, các mục của tôi được tải đầu tiên từ Dữ liệu cốt lõi và tải lại từ internet và tôi nhận thấy rằng chiều cao của hàng được tính khi tải lại từ internet. Vì vậy, tôi nhận thấy rằng khi tableView.reloadData () được gọi trong hoạt ảnh segue (vấn đề tương tự với segue đẩy và hiện tại), chiều cao hàng không được tính toán. Vì vậy, tôi đã ẩn chế độ xem bảng khi khởi tạo chế độ xem và đặt một trình tải hoạt động để ngăn chặn tác động xấu đến người dùng và tôi gọi tableView.reloadData sau 300ms và bây giờ vấn đề đã được giải quyết. Tôi nghĩ rằng đó là một lỗi UIKit nhưng cách giải quyết này tạo ra mẹo nhỏ.

Tôi đặt các dòng chủ đề (Swift 3.0) trong trình xử lý hoàn thành tải mục của mình

DispatchQueue.main.asyncAfter(deadline: .now() + .milliseconds(300), execute: {
        self.tableView.isHidden = false
        self.loader.stopAnimating()
        self.tableView.reloadData()
    })

Điều này giải thích tại sao đối với một số người, đặt dữ liệu tải lại trong layoutSubviews giải quyết vấn đề


Đây là WA duy nhất cũng làm việc cho tôi. Ngoại trừ tôi không sử dụng isHidden, nhưng đặt alpha của bảng thành 0 khi thêm nguồn dữ liệu, sau đó thành 1 sau khi tải lại.
PJ_Finnegan

6

không có giải pháp nào ở trên hiệu quả với tôi, công thức của phép thuật này có tác dụng gì: gọi chúng theo thứ tự sau:

tableView.reloadData()
tableView.layoutIfNeeded() tableView.beginUpdates() tableView.endUpdates()

dữ liệu tableView của tôi được điền từ một dịch vụ web, trong cuộc gọi lại kết nối, tôi viết những dòng trên.


1
Đối với swift 5, điều này đã hoạt động ngay cả trong chế độ xem bộ sưu tập, chúa phù hộ cho bạn, anh bạn.
Govani Dhruv Vijaykumar

Đối với tôi, điều này trả về chiều cao và bố cục chính xác của ô, nhưng nó không có dữ liệu trong đó
Darrow Hartman

Hãy thử setNeedsDisplay () sau những dòng đó
JAHelia

5

Trong trường hợp của tôi, dòng cuối cùng của Nhãn UIL đã bị cắt ngắn khi ô được hiển thị lần đầu tiên. Nó xảy ra khá ngẫu nhiên và cách duy nhất để định kích thước chính xác là cuộn ô ra khỏi chế độ xem và đưa nó trở lại. Tôi đã thử tất cả các giải pháp có thể được hiển thị cho đến nay (layoutIfNeeded..reloadData) nhưng không hiệu quả với tôi. Bí quyết là đặt "Autoshrink" thành Minimuum Font Scale (đối với tôi là 0,5). Hãy thử một lần


điều này đã làm việc cho tôi, mà không áp dụng bất kỳ giải pháp nào khác được liệt kê ở trên. Tìm thấy tuyệt vời.
mckeejm

2
Nhưng điều này tự động xử lý văn bản ... tại sao người ta muốn có các kích thước văn bản khác nhau trong chế độ xem bảng? Trông khủng khiếp.
lucius degeer

5

Thêm một ràng buộc cho tất cả nội dung trong ô tùy chỉnh chế độ xem bảng, sau đó ước tính chiều cao hàng của chế độ xem bảng và đặt chiều cao của hàng thành thứ nguyên tự động với trong một lần tải viewdid:

    override func viewDidLoad() {
    super.viewDidLoad()

    tableView.estimatedRowHeight = 70
    tableView.rowHeight = UITableViewAutomaticDimension
}

Để khắc phục sự cố tải ban đầu đó, hãy áp dụng phương thức layoutIfNeeded với trong ô chế độ xem bảng tùy chỉnh:

class CustomTableViewCell: UITableViewCell {

override func awakeFromNib() {
    super.awakeFromNib()
    self.layoutIfNeeded()
    // Initialization code
}
}

Điều quan trọng là phải đặt thành estimatedRowHeightgiá trị> 0 chứ không phải UITableViewAutomaticDimension(là -1), nếu không chiều cao hàng tự động sẽ không hoạt động.
PJ_Finnegan

5

Tôi đã thử hầu hết các câu trả lời cho câu hỏi này và không thể làm cho bất kỳ câu trả lời nào trong số đó hoạt động. Giải pháp chức năng duy nhất mà tôi tìm thấy là thêm phần sau vào UITableViewControllerlớp con của mình :

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    UIView.performWithoutAnimation {
        tableView.beginUpdates()
        tableView.endUpdates()
    }
}

Cuộc UIView.performWithoutAnimationgọi là bắt buộc, nếu không bạn sẽ thấy hoạt ảnh chế độ xem bảng bình thường khi bộ điều khiển chế độ xem tải.


làm việc và chắc chắn tốt hơn so với cách gọi reloadData hai lần
Jimmy George Thomas

2
Ma thuật đen. Làm điều đó viewWillAppearkhông hiệu quả với tôi, nhưng làm điều đó trong viewDidAppearthì có.
Martin

Giải pháp này 'đã' làm việc cho tôi khi được triển khai trong viewDidAppear. Nó không có nghĩa là tối ưu cho trải nghiệm người dùng vì nội dung bảng nhảy xung quanh khi kích thước chính xác xảy ra.
richardpiazza

tuyệt vời tôi đã cố gắng rất nhiều ví dụ nhưng thất bại bạn là con quỷ
Shakeel Ahmed

Giống như @martin
AJ Hernandez


3

gọi cell.layoutIfNeeded()bên trongcellForRowAt hoạt động với tôi trên ios 10 và ios 11, nhưng không hoạt động trên ios 9.

để có được công việc này trên ios 9, tôi gọi cell.layoutSubviews()và nó đã thực hiện thủ thuật.


2

Đính kèm ảnh chụp màn hình để bạn giới thiệuĐối với tôi, không có phương pháp nào trong số này hiệu quả, nhưng tôi phát hiện ra rằng nhãn có một Preferred Widthbộ rõ ràng trong Trình tạo giao diện. Loại bỏ điều đó (bỏ chọn "Rõ ràng") và sau đó sử dụng UITableViewAutomaticDimensionđã hoạt động như mong đợi.


2

Tôi đã thử tất cả các giải pháp trong trang này nhưng việc bỏ chọn các lớp kích thước sử dụng rồi kiểm tra lại nó đã giải quyết được vấn đề của tôi.

Chỉnh sửa: Bỏ chọn các lớp kích thước gây ra rất nhiều vấn đề trên bảng phân cảnh nên tôi đã thử một giải pháp khác. Tôi đã điền chế độ xem bảng của mình vào các phương thức viewDidLoadvà trình điều khiển chế độ xem của mình viewWillAppear. Điều này đã giải quyết vấn đề của tôi.


1

Tôi gặp sự cố với nhãn thay đổi kích thước nên tôi chỉ cần thực hiện
chatTextLabel.text = chatMessage.message chatTextLabel? .UpdateConstraints () sau khi thiết lập văn bản

// mã đầy đủ

func setContent() {
    chatTextLabel.text = chatMessage.message
    chatTextLabel?.updateConstraints()

    let labelTextWidth = (chatTextLabel?.intrinsicContentSize().width) ?? 0
    let labelTextHeight = chatTextLabel?.intrinsicContentSize().height

    guard labelTextWidth < originWidth && labelTextHeight <= singleLineRowheight else {
      trailingConstraint?.constant = trailingConstant
      return
    }
    trailingConstraint?.constant = trailingConstant + (originWidth - labelTextWidth)

  }

1

Trong trường hợp của tôi, tôi đang cập nhật trong chu kỳ khác. Vì vậy, chiều cao tableViewCell đã được cập nhật sau khi labelText được đặt. Tôi đã xóa khối không đồng bộ.

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
     let cell = tableView.dequeueReusableCell(withIdentifier:Identifier, for: indexPath) 
     // Check your cycle if update cycle is same or not
     // DispatchQueue.main.async {
        cell.label.text = nil
     // }
}

Tôi cũng có một khối không đồng bộ nhưng nó là cần thiết? Không có giải pháp thay thế?
Nazar Medeiros

1

Chỉ cần đảm bảo rằng bạn không đặt văn bản nhãn trong phương pháp xem bảng đại biểu 'willdisplaycell'. Đặt văn bản nhãn trong phương thức đại biểu 'cellForRowAtindexPath' để tính chiều cao động.

Không có gì :)


1

Trong trường hợp của tôi, chế độ xem ngăn xếp trong ô đã gây ra sự cố. Đó là một lỗi rõ ràng. Sau khi tôi gỡ bỏ nó, vấn đề đã được giải quyết.


1
tôi đã cố gắng tất cả các giải pháp khác, ony giải pháp của bạn làm việc cho cảm ơn bạn đã chia sẻ nó
tamtoum1987

1

Vấn đề là các ô ban đầu tải trước khi chúng ta có chiều cao hàng hợp lệ. Cách giải quyết là buộc tải lại bảng khi chế độ xem xuất hiện.

- (void)viewDidAppear:(BOOL)animated
{
  [super viewDidAppear:animated];
  [self.tableView reloadData];
}

đây là giải pháp tốt hơn rất nhiều đã giúp tôi. Nó không sửa được 100% ô nhưng có tới 80% đang lấy kích thước thực của chúng. Thanks a lot
TheTravloper

1

Chỉ dành cho iOS 12+, 2019 trở đi ...

Một ví dụ đang diễn ra về sự kém cỏi kỳ lạ thường xuyên của Apple, nơi các vấn đề diễn ra trong nhiều năm.

Nó dường như là trường hợp

        cell.layoutIfNeeded()
        return cell

sẽ sửa chữa nó. (Tất nhiên là bạn đang mất một số hiệu suất.)

Cuộc sống với Apple cũng vậy.


0

Trong trường hợp của tôi, sự cố với chiều cao ô xảy ra sau khi chế độ xem bảng ban đầu được tải và hành động của người dùng diễn ra (chạm vào nút trong ô có tác dụng thay đổi chiều cao ô). Tôi không thể làm cho ô thay đổi chiều cao của nó trừ khi tôi thực hiện:

[self.tableView reloadData];

Tôi đã thử

[cell layoutIfNeeded];

nhưng điều đó đã không hoạt động.


0

Trong Swift 3. Tôi phải gọi self.layoutIfNeeded () mỗi khi cập nhật văn bản của ô có thể sử dụng lại.

import UIKit
import SnapKit

class CommentTableViewCell: UITableViewCell {

    static let reuseIdentifier = "CommentTableViewCell"

    var comment: Comment! {
        didSet {
            textLbl.attributedText = comment.attributedTextToDisplay()
            self.layoutIfNeeded() //This is a fix to make propper automatic dimentions (height).
        }
    }

    internal var textLbl = UILabel()

    override func layoutSubviews() {
        super.layoutSubviews()

        if textLbl.superview == nil {
            textLbl.numberOfLines = 0
            textLbl.lineBreakMode = .byWordWrapping
            self.contentView.addSubview(textLbl)
            textLbl.snp.makeConstraints({ (make) in
                make.left.equalTo(contentView.snp.left).inset(10)
                make.right.equalTo(contentView.snp.right).inset(10)
                make.top.equalTo(contentView.snp.top).inset(10)
                make.bottom.equalTo(contentView.snp.bottom).inset(10)
            })
        }
    }
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let comment = comments[indexPath.row]
        let cell = tableView.dequeueReusableCell(withIdentifier: CommentTableViewCell.reuseIdentifier, for: indexPath) as! CommentTableViewCell
        cell.selectionStyle = .none
        cell.comment = comment
        return cell
    }

commentsTableView.rowHeight = UITableViewAutomaticDimension
    commentsTableView.estimatedRowHeight = 140

0

Không có giải pháp nào ở trên hoạt động nhưng sự kết hợp của các đề xuất sau đây đã làm được.

Phải thêm phần sau vào viewDidLoad ().

DispatchQueue.main.async {

        self.tableView.reloadData()

        self.tableView.setNeedsLayout()
        self.tableView.layoutIfNeeded()

        self.tableView.reloadData()

    }

Sự kết hợp ở trên của reloadData, setNeedsLayout và layoutIfNeeded đã hoạt động nhưng không hoạt động bất kỳ cách nào khác. Tuy nhiên, có thể là cụ thể cho các ô trong dự án. Và có, đã phải gọi reloadData hai lần để làm cho nó hoạt động.

Đồng thời đặt các điều sau trong viewDidLoad

tableView.rowHeight = UITableViewAutomaticDimension
tableView.estimatedRowHeight = MyEstimatedHeight

Trong tableView (_ tableView: UITableView, cellForRowAt indexPath: IndexPath)

cell.setNeedsLayout()
cell.layoutIfNeeded() 

Tương tự của tôi reloadData/beginUpdates/endUpdates/reloadDatacũng đang hoạt động; reloadData phải gọi là lần thứ hai. Không cần bọc nó lại async.
ray

0

Tôi đã gặp sự cố này và đã khắc phục nó bằng cách di chuyển mã khởi tạo chế độ xem / nhãn của tôi TỪ tableView(willDisplay cell:)ĐẾN tableView(cellForRowAt:).


đây KHÔNG phải là cách được khuyến nghị để khởi tạo một ô. willDisplaysẽ có hiệu suất tốt hơn cellForRowAt. Sử dụng chỉ cuối cùng để sắp xếp ô bên phải.
Martin

2 năm sau, tôi đang đọc bình luận cũ mà tôi đã viết ra. Đây là một lời khuyên tồi. Ngay cả khi willDisplaycó hiệu suất tốt hơn, iS khuyên bạn nên khởi chạy giao diện người dùng di động của bạn cellForRowAtkhi bố cục tự động. Thật vậy, bố cục được tính toán bởi UIKit sau cellForRowAt và trước willDisplay. Vì vậy, nếu chiều cao ô của bạn phụ thuộc vào nội dung của nó, hãy khởi tạo nội dung nhãn (hoặc bất cứ thứ gì) trong cellForRowAt.
Martin

-1
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{


//  call the method dynamiclabelHeightForText
}

sử dụng phương thức trên để trả về độ cao cho hàng một cách tự động. Và gán cùng một chiều cao động cho ống kính mà bạn đang sử dụng.

-(int)dynamiclabelHeightForText:(NSString *)text :(int)width :(UIFont *)font
{

    CGSize maximumLabelSize = CGSizeMake(width,2500);

    CGSize expectedLabelSize = [text sizeWithFont:font
                                constrainedToSize:maximumLabelSize
                                    lineBreakMode:NSLineBreakByWordWrapping];


    return expectedLabelSize.height;


}

Mã này giúp bạn tìm chiều cao động cho văn bản hiển thị trong nhãn.


Trên thực tế Ramesh, điều này không cần thiết miễn là các thuộc tính tableView.estimatedRowHeight và tableView.rowHeight = UITableViewAutomaticDimension được đặt. Ngoài ra, hãy đảm bảo rằng ô tùy chỉnh có các ràng buộc thích hợp đối với các tiện ích con khác nhau và ContentView.
BonanzaDriver
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.