Arhn - архитектура программирования

Минимальная высота UITableViewCell с автоматическим изменением размера ячеек

Я использую автоматическое изменение размера ячеек в своем проекте. Я хочу, чтобы ячеек было как минимум height, но я не могу установить минимальное height ограничение для моих ячеек в моем представлении контента (поскольку он отображается серым цветом в представлении Добавить новые ограничения:

введите описание изображения здесь

Можно ли как-то добавить минимум height ограничений для моих ячеек?


  • Предполагается, что размер представления содержимого зависит от поведения табличного представления (стиля) и фактического содержимого (подпредставления). Решение простое: добавить подвид. 23.04.2016
  • То, что @A-Live кажется самым простым решением. Вы можете добавить скрытое подпредставление, закрепленное вверху и внизу вашей ячейки с ограничением по высоте (ширина не имеет значения, но вам нужно будет как-то указать ее, чтобы AutoLayout был доволен). 23.04.2016
  • Спасибо, это сработало (хотя это не очень элегантное решение...). 23.04.2016

Ответы:


1

Когда UITableViewAutomaticDimension включен, система вызывает метод UITableViewCell systemLayoutSizeFittingSize:withHorizontalFittingPriority:verticalFittingPriority:. чтобы вычислить высоту ячейки, поэтому вы можете создать подкласс UITableViewCell и переопределить этот метод, чтобы установить минимальную высоту для ячейки, таким образом

class MinHeightTableViewCell: UITableViewCell {

    var minHeight: CGFloat?

    override func systemLayoutSizeFitting(_ targetSize: CGSize, withHorizontalFittingPriority horizontalFittingPriority: UILayoutPriority, verticalFittingPriority: UILayoutPriority) -> CGSize {
        let size = super.systemLayoutSizeFitting(targetSize, withHorizontalFittingPriority: horizontalFittingPriority, verticalFittingPriority: verticalFittingPriority)
        guard let minHeight = minHeight else { return size }
        return CGSize(width: size.width, height: max(size.height, minHeight))
    }
}

А потом

public func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "minHeightCell", for: indexPath) as! MinHeightTableViewCell
    cell.minHeight = 62 // change with your desidered min height
    cell.textLabel?.text = "some text"
    return cell
}
18.02.2018
  • Это работает хорошо, но мне любопытно: откуда вы узнали, что systemLayoutSizeFitting вызывается, когда UITableViewautomaticDimension включен? Я нигде не могу найти документацию по этому поводу. 07.01.2019
  • systemLayoutSizeFittingSize вызывается системой для получения размера представления на основе его ограничений. Когда UITableViewAutomaticDimension включен, табличное представление использует автоматический макет для ячеек с собственным размером, а затем вызывает systemLayoutSizeFittingSize для ячейки и возвращает размер ячейки на основе ограничений макета. Я согласен с вами, это не является явным. 08.01.2019

  • 2

    установите ограничение по высоте как height >= 60.0 Не нужно ничего делать

    13.05.2016

    3

    Вот код, используемый в viewDidLoad. cell — это UITableViewCell. Обратите внимание, что параметр relatedBy имеет значение >=. 44 мой минимальный рост...

    [cell.contentView addConstraint: [NSLayoutConstraint constraintWithItem: cell.contentView attribute: NSLayoutAttributeHeight relatedBy: NSLayoutRelationGreaterThanOrEqual toItem: nil attribute: NSLayoutAttributeNotAnAttribute multiplier: 1 constant: 44]];
    
    21.04.2020

    4

    Вы можете сделать свои ячейки динамической высотой, вернув методы расчета высоты UITableViewAutomaticDimension в таблице. Но для этого ограничения дизайна вашей ячейки должны быть такими, как показано ниже.

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

    введите здесь описание изображения

    Примечание. Заголовок задачи — это статическая высота. И описание будет динамической высоты. Таким образом, описание не имеет ограничения по высоте. Важно то, что вам нужно установить количество строк как 0 для метки описания.

    09.02.2017

    5

    простое добавленное ограничение высоты с минимальной высотой, которую вы хотите, а затем измените ее отношение на «Больше, чем равно». посмотрите выделенный участок экрана на короткое время. введите здесь описание изображения

    20.02.2018

    6

    Выполните следующие действия, чтобы установить автоматический размер ячейки с минимальной высотой.

    • Назначение и реализация tableview dataSource и делегата
    • Назначьте UITableViewAutomaticDimension для rowHeight и предполагаемойRowHeight
    • Реализовать методы делегата/источника данных (т.е. heightForRowAt и вернуть ему значение UITableViewAutomaticDimension)

    -

    Цель C:

    // in ViewController.h
    #import <UIKit/UIKit.h>
    
    @interface ViewController : UIViewController <UITableViewDelegate, UITableViewDataSource>
    
      @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;
    }
    

    Свифт:

    @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
        table.rowHeight = UITableViewAutomaticDimension
        table.estimatedRowHeight = UITableViewAutomaticDimension
    }
    
    
    
    // UITableViewAutomaticDimension calculates height of label contents/text
    func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
        return UITableViewAutomaticDimension
    }
    

    Для экземпляра метки в UITableviewCell

    • Установить количество строк = 0 (и режим разрыва строки = обрезать конец)
    • Установите все ограничения (сверху, снизу, справа и слева) в отношении его контейнера superview/cell.
    • Примечание. Установите минимальную высоту для метки, если вы хотите, чтобы метка занимала минимальную площадь по вертикали, даже если данных нет.

    введите здесь описание изображения

    20.02.2018

    7

    Я добавил это ограничение в свою ячейку, но в коде (быстро)

    contentView.heightAnchor.constraint(equalToConstant: 80).isActive = true
    

    Если вашему представлению ячейки нужно больше места:

    contentView.heightAnchor.constraint(greaterThanOrEqualToConstant: 80).isActive = true
    
    05.10.2020
    Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..