2016-09-11 4 views
0

Я программно создал TableView, используя разделы в swift. Количество разделов и строк всегда будет одинаковым, так как они просто отображают информацию, которую я вытаскиваю из Firebase.Выровнять текст ячейкиLabel влево влево программно в swift

Я хотел бы изменить textLabel одной из ячеек, чтобы выровнять ее сверху, а не середину ячейки. Все остальные textLabels я бы хотел сосредоточиться. Клетка в вопросе раздел 1, строка 1.

В настоящее время выглядит следующим образом:

enter image description here

Я искал, как сделать это на некоторое время, и многие люди говорят do:

cell.textLabel?.numberOfLines = 0 
cell.textLabel?.sizeToFit() 

Но это не работает. Я помещаю этот код в свой метод cellForRowAtIndexPath.

if indexPath.section == 0 { 
     if indexPath.row == 0 { 
      cell.textLabel!.text = "Our review" 
     } else { 
      cell.textLabel!.text = film?.Main_Review 
      cell.textLabel?.numberOfLines = 0  // HERE 
      cell.textLabel?.sizeToFit()   // HERE 
     } 
} 

Ничего не происходит, текст по-прежнему совпадает с центром ячейки.

Кто-нибудь знает простой способ сделать это? Предпочтительно без необходимости создавать пользовательскую ячейку (так как это нужно только для 1 строки)? Благодаря

UPDATE - Весь код для cellForRowAtIndexPath

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 

    let cell: UITableViewCell = UITableViewCell(style: .Value1, reuseIdentifier: cellId) 

    cell.selectionStyle = .None 
    cell.textLabel?.font = UIFont(name: "Verdana", size: 14) 
    cell.textLabel?.textColor = UIColor.darkGrayColor() 
    cell.detailTextLabel?.font = UIFont(name: "Verdana", size: 14) 


    if indexPath.section == 0 { 
     if indexPath.row == 0 { 
      cell.textLabel!.text = "Share" 
     } 
    } else if indexPath.section == 1 { 
     if indexPath.row == 0 { 
      cell.textLabel!.text = "Our review" 
     } else { 
      cell.textLabel!.text = film?.Main_Review 
      cell.textLabel?.numberOfLines = 0 
      cell.textLabel?.sizeToFit() 
     } 
    } else if indexPath.section == 2 { 
     if indexPath.row == 0 { 
      cell.textLabel!.text = "UK release date" 
      cell.detailTextLabel!.text = film?.Date_Released?.capitalizedString 
     } else if indexPath.row == 1 { 
      cell.textLabel!.text = "Directed by" 
      cell.detailTextLabel!.text = film?.Directed_By?.capitalizedString 
     } else if indexPath.row == 2 { 
      cell.textLabel!.text = "Running time" 
      cell.detailTextLabel!.text = film?.Running_Time 
     } else { 
      cell.textLabel!.text = "Certificate rating" 
      cell.detailTextLabel!.text = film?.Certificate_Rating 
     } 
    } 

    return cell 

} 
+0

Можете ли вы сказать как это условие когда-либо будет успешным ", если indexPath.section == 0 {if i ndexPath.section == 1 {', как это возможно –

+0

@NDoc Спасибо! Это была моя ошибка - обновлена. – Nick89

+0

написать все 'cellForRowAtIndexPath' – Vyacheslav

ответ

1

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

import Foundation 
import UIKit 

class ItemCell: UITableViewCell { 

var label : UILabel! 

override init(style: UITableViewCellStyle, reuseIdentifier: String?) { 
    super.init(style: style, reuseIdentifier: reuseIdentifier) 
    self.label = UILabel() 
    self.contentView.addSubview(label) 
} 

required init?(coder aDecoder: NSCoder) { 
    fatalError("init(coder:) has not been implemented") 
} 

override func layoutSubviews() { 
    super.layoutSubviews() 

    self.label.frame = CGRectMake(15,10,200,30) 
    self.label.adjustsFontSizeToFitWidth = true 
    self.label.textColor = UIColor.greenColor() 

} 

}

Тогда в вашем ViewController не забудьте использовать метод регистр класса как этот

self.tableView.dataSource = self 
    self.tableView.delegate = self 
    self.tableView.registerClass(ItemCell.self, forCellReuseIdentifier: "cellIdentifier") 

И в вашем cellForRowAtIndexPath

let cell:ItemCell! = tableView.dequeueReusableCellWithIdentifier("cellIdentifier") as? ItemCell 
+0

@MatGrit Спасибо. Я сделал, как вы сказали, но ярлык не отображается. Нет ошибки, теперь просто пустой для этой строки. Есть предположения? – Nick89

+0

@MatGrit Также, что вы подразумеваете под 'self.descr.frame.maxY + 10'? – Nick89

+0

My bad, Вместо self.descr put 10. Вам также нужно добавить текст в ярлык. Для отладки попробуйте добавить к ярлыку backgroundcolor. –

0
cell.textLabel?.sizeToFit() 

должен сделать ваш UILabel имеет размер нужно, чтобы обернуть содержание. Так что хорошо, что вы можете сделать, это изменить фон, чтобы увидеть, выполняет ли эта строка эту работу. Я думаю, проблема заключается в ваших ограничениях в ячейке. Вы должны взглянуть на ваш код или свои раскадровки. Autolayout tutorial

Примечание: вы должны отредактировать свой вопрос, иначе вы могли бы получить некоторые негативы для этого. Если секция 0 не может быть раздел 1.

if indexPath.section == 0 { 
     if indexPath.section == 1 { 
      /*your code */ 
     } 
    } 
+0

Спасибо @TomCobo - Код уже изменен :) – Nick89

+0

Я не использую раскадровки, это создано все программно. – Nick89

+0

вы можете добавить некоторые ограничения программно или показать свой код, где вы его добавляете – TomCobo

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