Есть ли способ добавить расстояние между UITableViewCell
?
Я создал таблицу, и каждая ячейка содержит только изображение. Изображение присваивается ячейке следующим образом:
cell.imageView.image = [myImages objectAtIndex:indexPath.row];
но это делает изображение увеличенным и вписывается во всю ячейку, и между изображениями нет промежутков.
Или, скажем, таким образом, высота изображения, например, 50, и я хочу добавить 20 интервалов между изображениями. Есть ли способ сделать это?
ios
objective-c
uitableview
Saili
источник
источник
Ответы:
Swift Version
Обновлено для Swift 3
Этот ответ несколько более общий, чем первоначальный вопрос для будущих зрителей. Это дополнительный пример к базовому примеру UITableView для Swift .
обзор
Основная идея заключается в создании нового раздела (а не новой строки) для каждого элемента массива. Разделы могут быть разнесены с использованием высоты заголовка раздела.
Как это сделать
Настройте ваш проект, как описано в примере UITableView для Swift . (То есть добавьте
UITableView
и подключитеtableView
выход к контроллеру вида).В Интерфейсном Разработчике измените цвет фона основного вида на голубой, а
UITableView
цвет фона очистите.Замените код ViewController.swift следующим.
ViewController.swift
Обратите внимание, что
indexPath.section
это используется, а неindexPath.row
для того, чтобы получить правильные значения для элементов массива и позиций касания.Как вы получили дополнительные отступы справа и слева?
Я получил это так же, как вы добавляете интервал к любому виду. Я использовал автоматические ограничения макета. Просто используйте инструмент булавки в Интерфейсном Разработчике, чтобы добавить интервал для ведущих и конечных ограничений.
источник
numberOfSectionsInTableView
иreturn 1
количество строк. Затем используйтеindexPath.section
для получения текущего индекса ячейки. Попробуйте это один раз. Я думаю, вы обнаружите, что вам не нужно вносить слишком много изменений в ваши текущие настройки. Это определенно проще, чем создавать подклассы.layer
манипуляции довольно быстрыми. Вы говорите это, потому что вы заметили снижение производительности или как общую хорошую практику? Даже если вы установите их в XIB, они все равно должны быть установлены при создании ячейки.Мое простое решение с использованием Swift :
результат
источник
super.layoutSubviews()
сначала позвонить, чтобы убедиться, что весь вид был правильно выложен, прежде чем устанавливать его кадр.didSet
дляselected
переменной и вызоваlayoutSubviews()
внутри!Способ, которым я добавляю интервал между ячейками, состоит в том, чтобы сделать numberOfSections = "Your array count" и сделать, чтобы каждый раздел содержал только одну строку. А затем определите headerView и его высоту.
источник
Мне нужно было сделать ту же концепцию, чтобы UITableCells имели «пробел» между ними. Поскольку вы не можете буквально добавить пространство между ячейками, вы можете имитировать его, манипулируя высотой ячейки UITableView, а затем добавляя UIView в contentView вашей ячейки. Вот скриншот прототипа, который я сделал в другом тестовом проекте, когда симулировал это:
Вот некоторый код (Примечание: есть много жестко закодированных значений для демонстрационных целей)
Во-первых, мне нужно было установить
heightForRowAtIndexPath
различные значения высоты для UITableViewCell.Далее я хочу манипулировать внешним видом UITableViewCells, поэтому я делаю это в
willDisplayCell:(NewsUITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
методе.Обратите внимание, что я сделал whiteRoundedCornerView height 70.0, и это вызывает симулированное пространство, потому что высота ячейки на самом деле равна 80.0, а мой contentView равен 70.0, что придает ей вид.
Могут быть и другие способы сделать это еще лучше, но я просто нашел, как это сделать. Я надеюсь, что это может помочь кому-то еще.
источник
Вам нужно будет установить рамку для вашего изображения. Не проверенный код
источник
layoutSubviews
если вы используете подклассыUITableViewCell
UITableViewCell
, чтобы получить нужный мне результат :) ... ПодклассыUITableViewCell
очень распространены.UITableViewCell
. Когда вы создаете кастом,UITableViewCells
вы должны создавать подклассыUITableViewCell
.Я был в одной лодке. Сначала я попытался переключиться на разделы, но в моем случае это было больше головной болью, чем я думал, поэтому я искал альтернативу. Чтобы продолжать использовать строки (и не связываться с доступом к данным модели), вот что сработало для меня, просто используя маску :
Все, что вам осталось сделать, - это увеличить высоту ячейки на то же значение, что и вы
verticalPadding
, а затем изменить внутреннюю компоновку, чтобы у всех видов, которые имели расстояние до краев ячейки, такой же интервал увеличивалсяverticalPadding/2
. Небольшой недостаток: вы получаетеverticalPadding/2
заполнение как сверху, так и снизу tableView, но вы можете быстро это исправить, установивtableView.contentInset.bottom = -verticalPadding/2
иtableView.contentInset.top = -verticalPadding/2
. Надеюсь, это кому-нибудь поможет!источник
Я думаю, что самое простое решение, если вы просто ищете немного места и, возможно, наименее затратно, это просто установить цвет границы ячейки на цвет фона таблицы, а затем установить ширину границы, чтобы получить желаемый результат!
источник
Если вы еще не используете заголовки разделов (или нижние колонтитулы), вы можете использовать их, чтобы добавить произвольный интервал в ячейки таблицы. Вместо того, чтобы иметь один раздел с n строками, создайте таблицу с n разделами по одной строке в каждом.
Реализуйте
tableView:heightForHeaderInSection:
метод управления расстоянием.Вы также можете захотеть реализовать
tableView:viewForHeaderInSection:
контроль за тем, как выглядит интервал.источник
Я решил это так в Swift 4.
Я создаю расширение UITableViewCell и включаю этот код:
Я надеюсь, что это поможет вам.
источник
Пример в Свифте 3 ..
Посмотреть код контроллера ниже
func numberOfSections (в tableView: UITableView) -> Int {return arraytable.count}
Скачать полный исходный код на Github: ссылка
https://github.com/enamul95/CustomSectionTable
источник
Три подхода, которые я могу придумать:
Создайте пользовательскую ячейку таблицы, которая отображает вид всей ячейки так, как вы хотите
Вместо добавления изображения в представление изображения, очистите подпредставления представления изображения, создайте пользовательское представление, которое добавляет UIImageView для изображения и другое представление, возможно, простой UIView, который обеспечивает желаемый интервал, и добавьте его в качестве подпредставления просмотр изображения.
Имеет ли это смысл?
источник
Да, вы можете увеличить или уменьшить интервал (заполнение) между двумя ячейками, создав одно базовое представление для представления содержимого в ячейке. Установите прозрачный цвет для фона представления содержимого, и вы можете отрегулировать высоту основного представления, чтобы создать пространство между ячейками.
источник
Основано на ответе Хусама: использование слоя с ячейками вместо представления содержимого позволяет при необходимости добавлять границы вокруг всей ячейки и аксессуара. Этот метод требует тщательной корректировки нижних ограничений ячейки, а также вставок, в противном случае вид будет неправильным.
источник
Измените количество строк в секции на 1. Вы изменили количество секций вместо количества строк.
Здесь вы положили расстояние между рядами
источник
Я думаю, что это самое чистое решение:
источник
layoutMargins
этого способа. Может быть, потому что я использую autolayout.Эта статья помогла, это в значительной степени то, что сказали другие ответы, но суммировать и кратко
https://medium.com/@andersongusmao/left-and-right-margins-on-uitableviewcell-595f0ba5f5e6
В нем он применяет их только к левой и правой сторонам, но
UIEdgeInsetsMake
init позволяет добавлять отступы ко всем четырем точкам.Обратите внимание, что UIEdgeInsets также может быть использован для достижения того же.
Xcode 9.3 / Swift 4
источник
Использование множества разных разделов не нужно. Другие ответы используют вставки рамки и CGRect и слои и ... BLAH. Не хорошо; использовать автоматическое расположение и пользовательский UITableViewCell. В этом UITableViewCell вместо дополнительного просмотра вашего контента внутри contentView создайте новый контейнерный вид (UIView), подпредставьте представление контейнера внутри contentView, а затем подпишите все ваши представления внутри представления контейнера.
Чтобы сделать интервал сейчас, просто отредактируйте поля макета представления контейнера, например, так:
источник
Попробуйте посмотреть - (UIEdgeInsets) layoutMargins; на камеру
источник
Моя ситуация была в том, что я использовал пользовательский UIView для viewForHeader в разделе, а также heightForHeader в разделе, возвращающем постоянную высоту, скажем, 40, проблема заключалась в том, что при отсутствии данных все представления заголовка были связаны друг с другом. поэтому я хотел сделать интервал между разделами при отсутствии данных, поэтому я исправил это, просто изменив плоскость «стиль табличного представления» на «Группу». И это сработало для меня.
источник
Ознакомьтесь с моим решением на GitHub с использованием подклассов
UITableView
и использованием функций времени выполнения Objective-C.Он в основном использует частную структуру данных Apple,
UITableViewRowData
которую я нашел при поиске частного заголовка среды выполненияUITableView
:https://github.com/JaviSoto/iOS10-Runtime-Headers/blob/master/Frameworks/UIKit.framework/UITableView.h ,
и вот желаемый приватный класс, который содержит все, что вам нужно для разметки пространств между вашими ячейками, как вы хотите, не устанавливая его в классах ячеек:
https://github.com/JaviSoto/iOS10-Runtime-Headers/blob/master/Frameworks/UIKit.framework/UITableViewRowData.h
источник
У меня были проблемы с тем, чтобы заставить это работать вместе с фоновыми цветами и дополнительными видами в камере. Закончилось тем, что:
1) Установите свойство представления фона ячеек с UIView, установленным с цветом фона.
2) Переместите этот вид в layoutSubviews, чтобы добавить идею разнесения
источник
Использование заголовков в качестве интервала будет работать нормально, я думаю, если вы не хотите использовать какие-либо заголовки. В противном случае, вероятно, не самая лучшая идея. Я думаю о том, чтобы создать собственный вид ячейки.
Примеры:
В пользовательской ячейке создайте фоновое представление с ограничениями, чтобы оно не заполняло всю ячейку, добавьте ему отступы.
Затем сделайте фон таблицы невидимым и удалите разделители:
источник
Если вы не хотите изменять номер раздела и строки вашего табличного представления (как я сделал), вот что вы делаете:
1) Добавьте ImageView в нижней части вашего представления ячейки таблицы.
2) Сделайте тот же цвет, что и цвет фона представления таблицы.
Я сделал это в моем приложении, и это работает отлично. Ура! : D
источник
SWift-5, расстояние между UITableViewCell
источник
Вы можете просто использовать ограничение в коде так:
важно добавить подпредставление (контейнер) и поместить в него другие элементы.
источник
добавьте внутренний вид к ячейке, затем добавьте свои собственные представления к ней.
источник
Решение Swift 5.0
Внутри UITableViewCell подкласс
источник
Используйте UITableViewDelegate
heightForRowAtIndexPath
и верните высоту строки.источник