Как скруглить ячейки tableview swift ios

Обновлено: 19.09.2024

У меня есть 2 Label в ячейке с динамическим содержимым, поступающим из бэкенда, и я пытаюсь сделать динамическое изменение высоты ячейки в TableView . Как правильно это сделать? Этот параметр настраиваемый UITableViewCells высота мне не поможет

3 ответа

У меня есть tableview, и у каждой tableviewcell есть кнопка. Я хочу изменить текущую высоту ячейки при нажатии кнопки ячейки. Как я могу это сделать? Спасибо!

Есть ли способ сбросить высоту tableview так, чтобы не показывались пустые строки? Например, tableview отображает 3 строки, но есть только одна строка с реальными данными. Я бы хотел, чтобы tableview уменьшал его размер, чтобы отображалась только одна строка

Вы можете сделать это 2 способами.

Вы можете сделать это, установив ниже строки кода.

с помощью делегатов

Примечание: UILabel numberOfLines должно быть 0 для автоматической высоты, и нет никакой фиксированной высоты, установленной для вашей ячейки UILabel .

Вы можете использовать эти две функции:

Не забудьте установить ограничения для ваших двух меток внутри ячейки, иначе automaticDimension не будет работать

Во-первых, вы должны убедиться, что правильно установили ограничения для подвидов ячейки, для вашего случая здесь, как они должны выглядеть:
(Что - то, что вы, вероятно, пропустите-приоритет охвата контента подметки был уменьшен ) После того, как вы правильно установили свои ограничения, мы можем перейти к следующему шагу - нашему UITableViewController (если у вас есть UIViewController с UITableView внутри него, ваш класс будет выглядеть по-другому. Я не освещаю это - это для другой темы)

Вы должны изменить свою функцию ViewDidLoad, чтобы она выглядела следующим образом:

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

Final result

Окончательный код UITableViewController:

Я не добавляю код CustomTableViewCell - это для другой темы

У меня есть tableview с меткой и изображением. в некоторых ячейках нет изображения, так как я использовал imageView.removeFromSuperview() , чтобы удалить его из ячейки. Когда в ячейке есть изображение, высота строки равна 445,а Custom отключается. как я могу динамически установить высоту строки в.

У меня есть динамическое количество клеток в моем tableView, как я могу изменить высоту tableView? Я пытаюсь, но это не работает: self.tableView.frame.size.height = CGFloat(height)

Похожие вопросы:

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

У меня есть приложение, в котором у меня есть Tableview , и в каждой строке этого tableview я динамически создаю пользовательскую ячейку tableview. Ниже приведен код для этого. NSArray *nib =.

В tableView у меня есть веб-представление, и ячейка высоты должна быть равна webView, я попытался отредактировать высоту строки ячейки следующим кодом: override func tableView(tableView.

У меня есть tableview, и у каждой tableviewcell есть кнопка. Я хочу изменить текущую высоту ячейки при нажатии кнопки ячейки. Как я могу это сделать? Спасибо!

Есть ли способ сбросить высоту tableview так, чтобы не показывались пустые строки? Например, tableview отображает 3 строки, но есть только одна строка с реальными данными. Я бы хотел, чтобы.

У меня есть tableview с меткой и изображением. в некоторых ячейках нет изображения, так как я использовал imageView.removeFromSuperview() , чтобы удалить его из ячейки. Когда в ячейке есть.

У меня есть динамическое количество клеток в моем tableView, как я могу изменить высоту tableView? Я пытаюсь, но это не работает: self.tableView.frame.size.height = CGFloat(height)

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

Я обновляю свое приложение, и я использовал этот метод в других областях приложения, и он работает, но по какой-то причине он не работает на tableView. tableView находится внутри ViewController.

Приведенный ниже пример является адаптацией и упрощением более длинного поста от We ❤ Swift. Вот как это будет выглядеть:


Это может быть просто обычное приложение с одним видом.

Замените код ViewController.swift следующим:

Прочитайте комментарии в коде, чтобы увидеть, что происходит. Основные моменты

  • Контроллер вида использует протоколы UITableViewDelegate и UITableViewDataSource .
  • Метод numberOfRowsInSection определяет, сколько строк будет в таблице.
  • Метод cellForRowAtIndexPath устанавливает каждую строку.
  • Метод didSelectRowAtIndexPath вызывается каждый раз, когда строка прослушивается.

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


Control перетащите из табличного представления в IB в выход tableView в коде.

Это все. Теперь вы можете запустить свое приложение.

Этот ответ был протестирован с Xcode 9 и Swift 4

Удаление Строк

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

междустрочье

Если вы хотите иметь интервал между строками, см. Этот дополнительный пример .


Пользовательские ячейки

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


Динамическая Высота Ячейки

Иногда вы не хотите, чтобы каждая клетка была одинаковой высоты. Начиная с iOS 8 легко автоматически установить высоту в зависимости от содержимого ячейки. См. этот пример для всего, что вам нужно, чтобы начать работу.

у меня есть пользовательский класс ячеек с парой IBOutlets. Я добавил класс в раскадровку. Я подключил все свои розетки. моя функция cellForRowAtIndexPath выглядит так:

вот мой пользовательский класс ячейки:

когда я запускаю приложение, все мои клетки пустуют. Я вышел из self.venueService.mainCategoriesArray() и он содержит все правильные строки. Я также попытался поместить фактическую строку, равную метке, и это дает тот же результат.

что я упустил? Любая помощь приветствуется.

протестировано с помощью Xcode 9 и Swift 4

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

готовый проект должен выглядеть так:

enter image description here

это может быть только один Просмотр Приложения.

добавьте новый файл Swift в свой проект. Назовите его MyCustomCell.быстрый. Этот класс будет содержать выходы для представлений, добавляемых в ячейку раскадровки.

мы подключим эти розетки позже.

Открыть Файл ViewController.swift и убедитесь, что у вас есть следующий контент:

добавьте представление таблицы в контроллер представления и используйте auto layout, чтобы прикрепить его к четырем сторонам контроллера вида. Затем перетащите ячейку представления таблицы в представление таблицы. А затем перетащите представление и метку на ячейку прототипа. (Возможно, Вам потребуется выбрать ячейку представления таблицы и вручную установите высоту строки к чему-то более высокому в инспекторе размера, чтобы у вас было больше места для работы.) Используйте auto layout для фиксации представления и метки, как вы хотите их расположить в представлении содержимого ячейки представления таблицы. Например, я Вид 100х100.

enter image description here

имя и идентификатор пользовательского класса

выберите ячейку представления таблицы и задайте пользовательский класс MyCustomCell (имя класса в файле Swift, который мы добавили). Также установите идентификатор cell (та же строка, которую мы использовали для cellReuseIdentifier в коде выше.

Табличные представления являются одними из наиболее часто используемых компонентов инфраструктуры UIKit и являются неотъемлемой частью взаимодействия с пользователем на платформе iOS. Табличные представления делают одну вещь, и они делают это очень хорошо, представляя упорядоченный список элементов. Класс UITableView является хорошим местом для продолжения нашего путешествия по инфраструктуре UIKit, поскольку он объединяет несколько ключевых концепций Cocoa Touch и UIKit, включая представления, протоколы и возможность повторного использования.

Источник данных и делегат

Класс UITableView , один из ключевых компонентов инфраструктуры UIKit, высоко оптимизирован для отображения упорядоченного списка элементов. Табличные представления могут быть настроены и адаптированы для широкого диапазона вариантов использования, но основная идея остается той же, представляя упорядоченный список элементов.

Простой вид таблицы

Класс UITableView отвечает только за представление данных в виде списка строк. Отображаемые данные управляются объектом источника данных табличного представления, доступным через свойство dataSource табличного представления. Источником данных может быть любой объект, который соответствует протоколу UITableViewDataSource протоколу Objective-C. Как мы увидим позже в этой статье, источником данных табличного представления часто является контроллер представления, который управляет представлением, представлением которого является табличное представление.

Аналогично, табличное представление отвечает только за обнаружение касаний в табличном представлении. Он не несет ответственности за реагирование на прикосновения. Табличное представление также имеет свойство delegate . Всякий раз, когда табличное представление обнаруживает событие касания, оно уведомляет своего делегата об этом событии касания. Ответственность за реагирование на событие касания несет представитель табличного представления.

Имея объект источника данных, управляющий его данными, и объект делегата, обрабатывающий взаимодействие с пользователем, табличное представление может фокусироваться на представлении данных. Результатом является многократно используемый и производительный компонент UIKit, который полностью соответствует шаблону MVC (Model-View-Controller), который мы обсуждали ранее в этой серии. Класс UITableView наследуется от UIView , что означает, что он отвечает только за отображение данных приложения.

Объект источника данных похож, но не идентичен объекту делегата. Делегируемому объекту делегируется управление пользовательским интерфейсом делегирующим объектом. Однако объекту источника данных делегируется контроль над данными.

В табличном представлении объект источника данных запрашивает данные, которые он должен отображать. Это означает, что объект источника данных также отвечает за управление данными, которые он передает в табличное представление.

Компоненты табличного представления

Класс UITableView наследуется от UIScrollView , подкласса UIView который обеспечивает поддержку отображения содержимого, которое больше, чем размер окна приложения.

Экземпляр UITableView состоит из строк, каждая из которых содержит одну ячейку, экземпляр UITableViewCell или его подкласс. В отличие от аналога UITableView в OS X, NSTableView , экземпляры UITableView имеют ширину в один столбец. Вложенные наборы данных и иерархии могут отображаться с помощью комбинации табличных представлений и контроллера навигации ( UINavigationController ). Мы обсудим навигационные контроллеры в следующей статье этой серии.

Я уже упоминал, что табличные представления отвечают только за отображение данных, доставляемых объектом источника данных, и обнаружение сенсорных событий, которые направляются в объект делегата. Табличное представление — не что иное как представление, управляющее множеством подпредставлений, ячеек табличного представления.

Новый проект

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

Откройте XCode, создайте новый проект (« Файл»> «Создать»> «Проект …» ) и выберите шаблон приложения Single View .

Новый проект

Назовите проект « Табличные представления» , присвойте имя и идентификатор организации и установите « Устройства» на iPhone . Сообщите Xcode, где вы хотите сохранить проект, и нажмите « Создать» .

Конфигурация проекта

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

Добавление представления таблицы

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

Самый простой способ добавить табличное представление к представлению контроллера представления — это основная раскадровка проекта. Откройте Main.storyboard и найдите библиотеку объектов справа. Просмотрите библиотеку объектов и перетащите экземпляр UITableView в представление контроллера представления.

Добавление представления таблицы

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

Регулировка размеров табличного представления

Добавьте необходимые ограничения макета в табличное представление, чтобы убедиться, что табличное представление охватывает ширину и высоту своего родительского представления. Это должно быть легко, если вы читали предыдущую статью об Auto Layout.

Добавление ограничений макета

Это почти все, что нам нужно сделать, чтобы добавить табличное представление в представление нашего контроллера представления. Создайте и запустите проект, чтобы увидеть результат в симуляторе. Вы по-прежнему увидите белое представление, так как в табличном представлении еще нет данных для отображения.

Табличное представление имеет два стиля по умолчанию, обычный и сгруппированный. Чтобы изменить текущий стиль табличного представления ( Обычный ), выберите табличное представление в раскадровке, откройте инспектор атрибутов и измените атрибут стиля на Сгруппированный . Для этого проекта мы будем работать с простым табличным представлением, поэтому обязательно переключите стиль табличного представления обратно на обычный.

Сгруппированное табличное представление

Подключение источника данных и делегата

Вы уже знаете, что табличное представление должно иметь источник данных и делегата. На данный момент табличное представление не имеет источника данных или делегата. Нам нужно соединить dataSource и delegate выходы табличного представления к объекту, который соответствует протоколам UITableViewDataSource и UITableViewDelegate .

В большинстве случаев этот объект является контроллером представления, который управляет представлением, которому табличное представление является подпредставлением. Выберите табличное представление в раскадровке, откройте инспектор соединений справа и перетащите его из dataSource источника данных (пустой кружок справа) в контроллер представления . Сделайте то же самое для выхода delegate . Наш контроллер представления теперь подключен к источнику данных и делегату табличного представления.

Подключение источника данных и делегата

Если вы запустите приложение как есть, оно почти мгновенно завершит работу. Причина этого станет ясна через несколько минут. Прежде чем более внимательно взглянуть на протокол UITableViewDataSource , нам нужно обновить класс ViewController .

Объекты источника данных и делегатов табличного представления должны соответствовать протоколам UITableViewDataSource и UITableViewDelegate соответственно. Как мы видели ранее в этой серии, протоколы перечислены после суперкласса класса. Несколько протоколов разделяются запятыми.

Читайте также: