2015-09-21 3 views
1

Я хочу создать UITableView с горизонтального пространства, как это:Установите ширину UITableViewCell

enter image description here

Так что я нашел решение here

Но, кажется, что он не работает функция «setFrame 'не будет работать с iOS9, Так что я нашел другое предложение использовать layoutSubviews

override func layoutSubviews() { 
    super.layoutSubviews() 

    self.contentView.frame = UIEdgeInsetsInsetRect(self.bounds, UIEdgeInsetsMake(0, 10, 0, 10)) 
} 

Но я т не работает и вот что я получаю:

enter image description here

Так как добавить правильно горизонтальное пространство, я использую Swift 2, Xcode7, Storyboard с обычаем UITableViewCell

+0

попробовать: - self.contentView.frame = UIEdgeInsetsMake (0, 20, 0, 20) –

+0

дает «Невозможно присвоить значение„UIEdgeInsets“типа к значению типа" CGRect» – iOSGeek

+0

Есть ли причина не просто сделать представление таблицы более узким? – Fennelouski

ответ

9

Итак, вот один из способов сделать это, создав пользовательскую ячейку.

Вы можете установить цвет фона в TableView на серый.

Затем в пользовательском прототипе UITableViewCell

  1. Установить цвет фона прозрачным.
  2. Перетащите UIView на него и измените его цвет на белый или любой другой, как у вас.
  3. Установите ограничения слева, справа, сверху и снизу, по крайней мере, на 5 из представления в ячейку.
  4. Убедитесь, что вы используете методы делегата для установки автоматической высоты, а затем расчетной высоты, если ячейка будет иметь динамическую высоту.
  5. Также удалите разделитель в виде таблицы так, чтобы линии не было.
  6. Внутри представления вы можете сбросить ярлык, чтобы добавить текст.

Я думаю, что должно служить вашей цели, дайте мне знать, как она идет :)

2

Я думаю, что вы не должны пытаться для обновления фрейма содержимого. Вы должны добавить представление (как родительское представление) в свой контентный вид, а затем применить все ограничения к этому UIView.

+0

Согласен. иметь контейнерView внутри contentView и позволить размер iOS contentView –

4

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

  • Это то, для чего строится UICollectionView. UICollectionView делает совершенно тривиальным изменение потока между вашими различными ячейками. Попробуйте перевести свою реализацию на использование UICollectionView и взглянуть на подклассификацию UICollectionViewFlowLayout (или просто настроить макет непосредственно в IB)
  • Если вы должны использовать UITableView: Создайте класс, который инкапсулирует представление, в котором вы хотите быть клетка. Затем заставьте таблицу видеть ширину экрана, а ячейки - высоту содержимого плюс вертикальный край. Добавьте свой вид непосредственно в ячейку contentView с соответствующей рамкой вставки.
+1

+1 Нет необходимости настраивать 'UITableView', как это,' UICollectionView' имеет всю эту функциональность, которая вам нужна, и это поведение можно установить с помощью раскадровки без написания строки код! – Kuba

+0

@Kuba хорошая точка, отредактированная, чтобы указать, что вы можете делать все содержимое коллекции в IB – rudd

1

Вы можете попытаться подкласс клетки и переопределить setFrame:

- (void)setFrame:(CGRect)frame { 
    frame.origin.x += inset; 
    frame.size.width -= 2 * inset; 
    [super setFrame:frame]; 
} 
1

Вы также можете попробовать это решение Если вы используете Пользовательские Tableview ячейки в XIb чем

step1: RightClick на ячейка xib Шаг2: Открыть как> исходный код step3: попытаться найти <tableViewCellContentView> раздел тегов. step4: найти autoresizingMask тег ниже <tableViewCellContentView> и добавьте widthSizable="YES" в <autoresizingMask> тег , например

`<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="1Ah-hd-rCV" id="Xqs-eb-z8W">` 

    `<autoresizingMask key="autoresizingMask" widthSizable="YES"/>` 
`</tableViewCellContentView>` 

Похоже, что приведенный выше код после установки этого.

потому что содержимое содержимого tableviewcell не выполняет автоматическую сортировку, поэтому вам нужно закодировать для этого. Как и выше.

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

поставил UIView в tableViewCell и сделать мобильное фон ясного и TableView вы хотите серые, чем установить его цвет фона серый и сделать размер UIView, который вы хотите отобразить и сделать его горизонтально растягиваются в ходе автоматических масок ,

Надеюсь, это вам поможет. Спасибо!

+0

@iOSGeek, если вы нашли решение для этого, чем это очень хорошо, но у меня есть новый ответ для этого. Потому что вы не принимали никакого ответа все еще так что я пишу новый ответ. –

+0

@iOSGeek вы должны принять ответ, потому что, если у другого пользователя есть такая же проблема, как и вы, он может легко найти правильный ответ, так что ваша ответственность за то, что вы использовали для решения, вы должны принять. Это поможет другим пользователям. Спасибо! –

Смежные вопросы