Dynamically increase height of UILabel & TableView Cell?

前端 未结 7 1726
广开言路
广开言路 2020-12-01 12:52

I have a UITableView in which i am displaying a custom cell.I my cell i have two label & one view as below in picture.

I have given constraint of left v

7条回答
  •  Happy的楠姐
    2020-12-01 13:09

    To set automatic dimension for row height & estimated row height, ensure following steps to make, auto dimension effective for cell/row height layout.

    • Assign and implement tableview dataSource and delegate
    • Assign UITableViewAutomaticDimension to rowHeight & estimatedRowHeight
    • Implement delegate/dataSource methods (i.e. heightForRowAt and return a value UITableViewAutomaticDimension to it)

    -

    Objective C:

    // in ViewController.h
    #import 
    
    @interface ViewController : UIViewController 
    
      @property IBOutlet UITableView * table;
    
    @end
    
    // in ViewController.m
    
    - (void)viewDidLoad {
        [super viewDidLoad];
        self.table.dataSource = self;
        self.table.delegate = self;
    
        self.table.rowHeight = UITableViewAutomaticDimension;
        self.table.estimatedRowHeight = UITableViewAutomaticDimension;
    }
    
    -(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
    
        return UITableViewAutomaticDimension;
    }
    

    Swift:

    @IBOutlet weak var table: UITableView!
    
    override func viewDidLoad() {
        super.viewDidLoad()
    
        // Don't forget to set dataSource and delegate for table
        table.dataSource = self
        table.delegate = self
    
       // Set automatic dimensions for row height
        // Swift 4.2 onwards
        table.rowHeight = UITableView.automaticDimension
        table.estimatedRowHeight = UITableView.automaticDimension
    
    
        // Swift 4.1 and below
        table.rowHeight = UITableViewAutomaticDimension
        table.estimatedRowHeight = UITableViewAutomaticDimension
    
    }
    
    
    
    // UITableViewAutomaticDimension calculates height of label contents/text
    func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
        // Swift 4.2 onwards
        return UITableView.automaticDimension
    
        // Swift 4.1 and below
        return UITableViewAutomaticDimension
    }
    

    For label instance in UITableviewCell

    • Set number of lines = 0 (& line break mode = truncate tail)
    • Set all constraints (top, bottom, right left) with respect to its superview/ cell container.
    • Optional: Set minimum height for label, if you want minimum vertical area covered by label, even if there is no data.

    enter image description here

    Note: If you've more than one labels (UIElements) with dynamic length, which should be adjusted according to its content size: Adjust 'Content Hugging and Compression Resistance Priority` for labels which you want to expand/compress with higher priority.

提交回复
热议问题