2016-05-03 2 views
-5

Я пытаюсь удалить пустые строки из таблицы. Когда строка пуста, например, без текста, строка не содержит содержимого, но создает пробел. Я бы хотел устранить это пространство?Как удалить пробел между строками таблицы в swift

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as! ArrayDetailTableViewCell 

    //configure cell 

switch indexPath.row { 
    case 0: 
     cell.fieldLabel.text = "1." 
     cell.valueLabel.text = array.item1 
    case 1: 
     if array.item2 != "cod" { 
      cell.fieldLabel.text = "2." 
      cell.valueLabel.text = array.item2 
     } else { 
      cell.fieldLabel.text = "" 
      cell.valueLabel.text = "" 
    default: 
     cell.fieldLabel.text = "" 
     cell.valueLabel.text = "" 
    } 

}

see here the print

+1

Я не понимаю ваш вопрос - можете ли вы объяснить подробнее о вашей проблеме? –

+0

Пожалуйста, будьте более конкретным в своем вопросе, код, который вы опубликовали, не имеет отношения к тому, что я думаю, ваш вопрос и что такое 'array.item2', вы рассмотрели использование индексов, например. 'Массив [2]'. Наконец попробуйте это: 'tableView.separatorStyle = .None' –

+0

О, извините, я пропустил несколько вещей. Посмотрите сейчас, я обновил код и дам картину проблемы. Когда случай не соответствует случаю 1:, он оставляет пустую строку таблицы. Я хотел удалить эту пустую строку или что-то вроде этого – Ewerson

ответ

0

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

однако я думаю, что если вы просто хотите, чтобы скрыть ячейку, вы можете попробовать использовать cell.hidden в коде:

switch indexPath.row { 
case 0: 
    cell.fieldLabel.text = "1." 
    cell.valueLabel.text = array.item1 
case 1: 
    if array.item2 != "cod" { 
     cell.fieldLabel.text = "2." 
     cell.valueLabel.text = array.item2 
    } else { 
     cell.fieldLabel.text = "" 
     cell.valueLabel.text = "" 
     cell.hidden = true 
default: 
    cell.fieldLabel.text = "" 
    cell.valueLabel.text = "" 
} 
} 
+0

ow да спасибо @apikurious ... он исчезает. Но пространство продолжается между строкой 1 e row 2 – Ewerson

+0

@Ewerson Я не слишком уверен, что вы подразумеваете под пробелом между строк 1 и 2? ваша таблица - динамическая таблица со своими данными, загруженными из массива или что-то в этом роде? – apikurious

+0

@apikuriuos В таблице приведен список данных ядра ядра. Если в основных данных, например, array.item2! = «Cod», он отобразит строку с содержимым, иначе отобразит пустую строку. Проблема заключается в том, что она представляет собой пустую строку, я даже скрываю (как вы сказали), это размер пустой строки, как будто контент пока еще. стол неупорядочен, как на картинке, прилагаемой к проблеме выше. – Ewerson

-2

В вашем viewWillLayoutSubview методе ViewController, который содержит tableView изменения Tableview separatorStyle к UITableViewSeparatorStyle.None .Это сделает разницу, что вам нужно, я думаю.

0

Чтобы удалить пространство, одним из способов является изменение возврата высоты в heightForRowAtIndexPath.

Но в heightForRowAtIndexPath мы не можем вызвать cellForRowAtIndexPath, так как он станет рекурсивным и приложение сработает. Поэтому мы должны использовать наш источник данных, чтобы проверить, какие элементы возвращают пустую высоту.

Как это:

class My_UITableView: UITableView, UITableViewDataSource, UITableViewDelegate, UIScrollViewDelegate { 

    var My_Items: [Int: Strings] = [Int: String](); //this is your data source which contains your items. 

    func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat { 
     if (My_Items.count > indexPath.row){ 
      if let Current_Item = My_Items[indexPath.row] { 
       if (Current_Item == ""){ 
        return 0; //whatever value you wish to check in your data source item, if it matches your condition send a different height. 
       } 
      } 
     } 
     return 50; 
    } 
} 
+0

спасибо за помощь ... @Ghulam Ali Я попробовал, я использовал следующий код: [link] i.stack.imgur.com/ RKmzq.png, но это не сработало, он дал следующую ошибку: Thread 1: EXC_BAD_ACCESS (code = 2, address = 0x7fff586eff8) – Ewerson

+0

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

+0

Если у вас все еще есть проблемы, я обновил ответ, чтобы уточнить его дальше. –