Мне нужно пространство между двумя ячейками в виде таблицы,
Я хочу такую ячейку,
Как я могу это сделать?
Мне нужно пространство между двумя ячейками в виде таблицы,
Я хочу такую ячейку,
Как я могу это сделать?
Вы можете создавать разделы TableView также в UITableView... Эти методы являются обязательными, поэтому создавайте разделы, и в каждом разделе вы можете создавать одну ячейку, как на картинке.
вы не можете установить расстояние между ячейками напрямую, но вы можете установить высоту для заголовка в разделе для достижения того же результата.
1.Вставьте номера ячейки, которые вам нужны, в виде разделов:
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return 3; // in your case, there are 3 cells
}
2. вернуть только 1 ячейку для каждой секции
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return 1;
}
3. установить высоту заголовка в секции, чтобы установить пространство между ячейками
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
return 10.; // you can have your own choice, of course
}
4. установите цвет фона заголовка, чтобы очистить цвет, поэтому он не будет выглядеть странным
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{
UIView *headerView = [[UIView alloc] init];
headerView.backgroundColor = [UIColor clearColor];
return headerView;
}
Лучший способ получить пространство между двумя ячейками в TableView, объявить номера разделов, которые вы хотите в методе делегирования numberofsections таким образом
Например, у вас есть массив из 10 объектов
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return [array count]; //array count returns 10
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return 1;// this should be one because it will create space between two cells if you want space between 4 cells you can modify it.
}
Тогда важный момент в методе делегата cellForRowAtIndexPath вам нужно использовать indexpath.section, но не indexpath.row
cell.textLabel.text=[NSString stringWithFormat:@"%@",[array objectAtIndex:indexPath.section]];
Это проверка вашего табличного пространства для пространства между двумя ячейками. Наслаждайтесь!
Ответ на несколько разделов будет работать, но он очень хрупкий и не разрешает разделы актуальные. Вместо этого вы должны создать пользовательскую ячейку или собственный прототип ячейки, который просто имеет пробел внизу и/или сверху.
Используйте свои стойки и пружины в IB для поддержания этого равномерного зазора и используйте heightForRowAtIndexPath, чтобы вернуть высоту, которая включает пробел.
Цель - C
UIView* separatorLineView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 3)];/// change size as you need.
separatorLineView.backgroundColor = [UIColor whiteColor];// you can also put image here
[cell.contentView addSubview:separatorLineView];
Swift 3
var separatorLineView = UIView(frame: CGRect(x: 0, y: 0, width: 320, height: 3))
/// change size as you need.
separatorLineView.backgroundColor = UIColor.white
// you can also put image here
cell.contentView.addSubview(separatorLineView)
Это сработало для меня.
Если кто-то ищет версию Swift. Здесь вы идете.
func tableView(tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
return 10; // space b/w cells
}
func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return items.count // count of items
}
func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
let header = UIView()
header.backgroundColor = UIColor.clearColor()
return header
}
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 1
}
Для людей, которые ищут альтернативный способ отображения пробелов между ячейками без использования разделов, вы можете отображать альтернативные цвета и высоту, как показано ниже. Используйте clearColor
для интервала.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
if (indexPath.row % 2 == 1)
{
static NSString *CellIdentifier = @"cellID1";
UITableViewCell *cell = (UITableViewCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
reuseIdentifier:CellIdentifier];
}
cell.backgroundColor = [UIColor colorWhite];
return cell;
} else {
static NSString *CellIdentifier2 = @"cellID2";
UITableViewCell *cell2 = (UITableViewCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier2];
if (cell2 == nil) {
cell2 = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
reuseIdentifier:CellIdentifier2];
}
cell2.backgroundColor = [UIColor clearColor];
return cell2;
}
}
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
if (indexPath.row % 2 == 1) {
return 40.0;
} else {
return 2.0;
}
}
Добавьте эти строки в метод cellForRowAtIndexPath
UITableViewDelegate
перед возвратом ячейки.
let separator = UIView(frame: CGRectMake(0, 0, cell!.bounds.size.width, 1))
separator.backgroundColor = UIColor.whiteColor()
cell.contentView.addSubview(separator)
Иногда вам действительно нужно оставить табличное представление разделенным в строках и иметь 1 раздел. Например, это может произойти, если вам нужно отобразить пользовательский заголовок для этого табличного представления, который остается на месте при прокрутке раздела.
То, что я рекомендовал бы сделать в этом случае, возвращает более высокий поплавок, чем нормальная высота ячейки в:
- (float)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
а затем убедитесь, что стиль таблицы - это Plain, а разделитель ячейки - нет. Вы можете сделать это в самом XIB файле или в коде:
self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
self.tableView.style = UITableViewStylePlain;
Возможно, также добавьте стиль выбора ячейки в none (иначе это будет выглядеть так, как будто вы выбираете больше, чем только видимую часть ячейки).
cell.selectionStyle = UITableViewCellSelectionStyleNone;
Это создаст впечатление пространства между ячейками, но в то же время удерживает их как строки в одной секции (что иногда и есть то, что вы хотите).
Я использовал простой и быстрый подход для этого (используя раскадровку)
Когда таблица будет загружена, будет ощущение, что между ячейками есть пробелы.
Для интервала между ячейками, подобными тем, которые есть на вашем скриншоте, нет необходимости в настраиваемых ячейках (для их просмотра в любом случае, например, градиента bkg и т.д., это может быть хорошей идеей, но это не поможет расстояние между ячейками)
Чтобы достичь такого рода интервалов, просто используйте разные разделы в своем UITableView.
[EDIT] Все объяснено В Руководстве по программированию Apple TableView (и это стоит его прочитать, поскольку оно содержит много вещей, которые вы должны знать о таблицах)
То, что вы пытаетесь достичь, визуально, будет таким же, как добавление содержимого каждой ячейки внутри контейнера View с серым фоном и наличие этого представления внутри ячейки. Я не думаю, что есть необходимость добавлять пробелы между ячейками.
* РАБОТА С IOS 9 XCODE 7.3 *
Самый простой способ добиться этого - просто добавить этот код к методу cellForRowAtIndexPath.
cell.separatorInset.left = 20.0
cell.separatorInset.right = 20.0
cell.separatorInset.top = 20.0
cell.separatorInset.bottom = 20.0
cell.layer.borderWidth = 3
cell.layer.cornerRadius = 20.0
cell.layer.borderColor = UIColor.flatSkyBlueColorDark().CGColor
Затем перейдите на свою панель рассказов и нажмите на таблицу. Перейдите к инспектору идентификации и измените цвет фона "Вид" на любой цвет границы, установленный в методе. Вуаля! Играйте со значениями, чтобы получить желаемый результат. Надеюсь, это поможет!
Примечание. Если вы используете библиотеку Chameleon, вы должны установить цвет фона для представления в коде, а не через плагин story board. По какой-то причине цвет кажется затененным.
Хорошо то, что я сделал, просто имитирует пространство, создавая простую пользовательскую ячейку, которая немного больше, чем я хочу (cell + gap/2), а затем помещаю все содержимое моей ячейки во внутренний вид.
Затем поместите верхний вид вашей камеры в качестве цвета фона и внутреннего вида в качестве вашей фактической ячейки. И у вас будет иллюзия наличия пространства между ячейками, когда на самом деле это просто большая ячейка с границами.
Я не знаю, почему все ответы сложны. KIS, только с помощью раскадровки Я положил UIView внутри TableCell Content View; теперь высота UIView меньше, чем высота содержимого, и что это!
Играйте с цветом Content View и цветом UIView, чтобы получить желаемый результат.
Мое простое решение с помощью Swift:
// Inside UITableViewCell subclass
override func layoutSubviews() {
let f = contentView.frame
let fr = UIEdgeInsetsInsetRect(f, UIEdgeInsetsMake(10, 10, 10, 10))
contentView.frame = fr
}
или один код строки
override func layoutSubviews() {
contentView.frame = UIEdgeInsetsInsetRect(contentView.frame, UIEdgeInsetsMake(10, 10, 10, 10))
}
В Table View DataSource существует два метода с именем количество разделов и количество строк В разделах return 3; В строках return 1;
Вам не нужно назначать каждый раздел для каждой ячейки. Просто создайте UIView (контейнер) внутри своей ячейки, поместите его в ячейку. И мы компонуем компоненты, такие как ярлык, текст, изображение в этом контейнере.
Я предлагаю создать собственный базовый класс UITableViewCell и использовать этот класс, как показано ниже,
Вы можете играть с "заполнением" в соответствии с вашими потребностями.
-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return __titlesArray.count;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return 1;
}
-(CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
return 10;
}
-(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{
UIView *header = [[UIView alloc]init];
header.backgroundColor = [UIColor clearColor];
return header;
}
Я использую как:
override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
return 194.0;
}
override func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) {
cell.contentView.backgroundColor = UIColor.clearColor()
let whiteRoundedView : UIView = UIView(frame: CGRectMake(0, 0, self.view.frame.size.width, 185))
whiteRoundedView.backgroundColor = UIColor( red: CGFloat(61.0/255.0), green: CGFloat(117.0/255.0), blue: CGFloat(147.0/255.0), alpha: CGFloat(1.0))
whiteRoundedView.layer.masksToBounds = false
whiteRoundedView.layer.cornerRadius = 3.0
whiteRoundedView.layer.shadowOffset = CGSizeMake(-1, 1)
whiteRoundedView.layer.shadowOpacity = 0.5
cell.contentView.addSubview(whiteRoundedView)
cell.contentView.sendSubviewToBack(whiteRoundedView)
}
Получить значения RGB цветового кода:
1) сначала создайте 2 раздела в виде таблицы. 2) создать пустую ячейку. 3) создайте ячейку с данными, которые вы хотите отобразить. 4) используйте метод
(CGFloat) tableView: (UITableView *) tableView heightForRowAtIndexPath: (NSIndexPath *) indexPath { if (indexPath.section == 0) {
if (indexPath.row% 2!= 1) { return 15.0; } else { возврат 100; } } еще
if (indexPath.row % 2 != 1) {
return 100.0;
} else {
return 15.0;
}
}
Он добавит пространство между ячейками. Это сработало для меня.
Вот мой метод с Swift 3:
В ViewDidLoad() добавьте:
self.tableView.rowHeight = 500.0
В представлении таблицы CellForRowAt добавьте следующее:
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)
// Configure the cell...
var actualContentView = UIView()
actualContentView.frame = CGRect(x: 10, y: 10, width: cell.contentView.frame.width - 20, height: cell.contentView.frame.height - 20)
actualContentView.backgroundColor = UIColor.blue
cell.contentView.addSubview(actualContentView)
return cell
}
Я проверил все ответы, но я думаю, что это самый простой способ:
UIView * theContentView = [UIView alloc]initWithFrame:CGRectMake(0,gap,width,height)];
theContentView.backgroundcolor = [UIColor lightGrayColor];//contentColor
cell.backgroundcolor = [UIColor blackColor];//gapColor
[cell addSubview: theContentView]
Код прототипа говорит, что вы можете создать подпункт, чтобы отображать содержимое ячейки, а остальная часть - это пробел по вашему желанию.