Я работал над этим около двух дней, поэтому решил поделиться с вами своими знаниями.
Возникает вопрос: можно ли уменьшить ширину ячейки в сгруппированном UITableView?
Ответ - нет.
Но есть два способа обойти эту проблему.
Решение №1: Более тонкая таблица. Можно изменить рамку tableView, чтобы таблица была меньше. Это приведет к тому, что UITableView отобразит внутреннюю ячейку с уменьшенной шириной.
Решение для этого может выглядеть так:
-(void)viewWillAppear:(BOOL)animated
{
CGFloat tableBorderLeft = 20;
CGFloat tableBorderRight = 20;
CGRect tableRect = self.view.frame;
tableRect.origin.x += tableBorderLeft; // make the table begin a few pixels right from its origin
tableRect.size.width -= tableBorderLeft + tableBorderRight; // reduce the width of the table
tableView.frame = tableRect;
}
Решение # 2: визуализация ячеек изображениями
Это решение описано здесь: http://cocoawithlove.com/2009/04/easy-custom-uitableview-drawing.html
Надеюсь, эта информация будет вам полезна. Мне потребовалось около 2 дней, чтобы попробовать множество возможностей. Вот что осталось.
ios
iphone
uitableview
width
Томен
источник
источник
Ответы:
Лучший и более чистый способ добиться этого - создать подкласс UITableViewCell и переопределить его
-setFrame:
метод следующим образом:Почему лучше? Потому что два других хуже.
Отрегулируйте ширину представления таблицы в
-viewWillAppear:
Прежде всего, это ненадежно, контроллер супервизора или родительского представления может регулировать фрейм табличного представления дальше после
-viewWillAppear:
вызова. Конечно, вы можете создать подкласс и переопределить-setFrame:
для своего UITableView точно так же, как я делаю здесь для UITableViewCells. Однако создание подклассов от UITableViewCells - это очень распространенный, легкий и Apple способ.Во-вторых, если ваш UITableView имеет backgroundView, вы не хотите, чтобы его backgroundView сужался вместе. Сохранение ширины backgroundView при уменьшении ширины UITableView - нетривиальная работа, не говоря уже о том, что расширение подпредставлений за пределы его супервизора - не очень элегантная вещь в первую очередь.
Пользовательский рендеринг ячеек для имитации более узкой ширины
Для этого вам необходимо подготовить специальные фоновые изображения с горизонтальными полями, и вам нужно самостоятельно разметить подвиды ячеек, чтобы учесть поля. Для сравнения, если вы просто отрегулируете ширину всей ячейки, автоматическое изменение размера сделает всю работу за вас.
источник
Чтобы сделать это в Swift, который не предоставляет методов для установки переменных, вам придется переопределить установщик для
frame
. Первоначально опубликовано (по крайней мере, там, где я его нашел) здесьисточник
Если ничего не работает, вы можете попробовать это
Сделайте цвет фона ячейки прозрачным, а затем поместите изображение ячейки нужного размера. Если вы хотите отобразить текст в этой ячейке, поместите метку над изображением. Не забудьте также установить цвет фона метки на прозрачный цвет.
источник
Я обнаружил, что принятое решение не работает при вращении. Чтобы получить UITableViewCells с фиксированной шириной и гибкими полями, я просто адаптировал приведенное выше решение к следующему:
Метод вызывается всякий раз, когда устройство вращается, поэтому ячейки всегда будут по центру.
источник
Есть метод, который вызывается при повороте экрана: viewWillTransitionToSize
Здесь вы должны изменить размер рамки. См. Пример. При необходимости измените координаты фрейма.
источник
я делаю это в
И это сработало для меня
источник
В файле .h добавьте делегата UITableViewDataSource.
источник