2015-08-24 5 views
0

Когда я запускаю свое приложение в симуляторе, мои ячейки таблицы имеют правильную длину (iPhone 5s), но когда я запускаю его на iPhone6, ячейки начинаются как вся ширина экрана, а затем evert назад к размеру их iPhone 5s.UITableViewCell в разных размерах экрана

Любые идеи о том, что я делаю неправильно?

Код:

override func viewDidLoad() { 
    super.viewDidLoad() 

    theTableView.setTranslatesAutoresizingMaskIntoConstraints(false) //Don't forget this line 

    var leftSideConstraint = NSLayoutConstraint(item: theTableView, attribute: .Left, relatedBy: .Equal, toItem: view, attribute: .Left, multiplier: 1.0, constant: 0.0) 
    var rightSideConstraint = NSLayoutConstraint(item: theTableView, attribute: .Left, relatedBy: .Equal, toItem: view, attribute: .Right, multiplier: 1.0, constant: 0.0) 

    view.addConstraints([leftSideConstraint, rightSideConstraint]) 

    } 

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


    let screenSize: CGRect = UIScreen.mainScreen().bounds 
    let screenWidth = screenSize.size.width 
    let screenHeight = screenSize.size.height 

    theTableView.frame = CGRectMake(0, 0, screenWidth, screenHeight) 
    cell.frame = CGRectMake(0, 0, screenWidth - 20, 44) 
    return cell 
} 

enter image description here

enter image description here

+0

Вам не нужно устанавливать кадр ячейки. Он всегда будет заполнять таблицу. Возможно, рама вашего табличного представления ошибочна. – rmaddy

+0

Как это может быть неправильно, если я устанавливаю его в рамки представления? –

+1

Почему вы устанавливаете рамку представления таблицы снова и снова внутри метода cellForRowAtIndexPath? Установите его один раз в нужном месте. – rmaddy

ответ

0
theTableView.frame = CGRectMake(0, 0, screenWidth, screenHeight) 

кадр мнение, должен быть настроен, вероятно, в viewDidLoad и обычно не изменяется.

cell.frame = CGRectMake(0, 0, screenWidth - 20, 44) 

Если все, что вам нужно сделать, это установить высоту ячейки до 44 либо установить tableView.estimatedRowHeight = 44.0 или добавить следующее переопределение к контроллеру вида:

func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat { 
    return CGFloat(44) 
} 
+0

Я пытаюсь установить размер ячейки (ширину) на всех размерах устройства. –

+0

Он делает это по умолчанию. Вам не нужно ничего делать для этого ... Если ваше приложение не ведет себя так, проблема, скорее всего, где-то в другом месте. Можете ли вы предоставить скриншоты, которые могут визуально показать вашу проблему? –

+0

Уверен, вопрос обновлен с помощью скриншота. Как вы можете видеть на iPhone 6, ячейки не соответствуют ширине. Но на iPhone 5, 5 и 4 он работает отлично. –

0

Я справилась с этой нагрузкой времени до того, как были введены экраны выше 320 пикселей.

Подкласс UITableViewCell и убедитесь, что вы переопределить

- (void)layoutSubviews 

там называют super.layoutSubviews(), а затем прочитать размер кадра и размер любые подэлементы в там на основе этого нового размера кадра.

0

Похоже, проблема может быть с фактическим UITableView. Вы используете UITableViewController или вы добавили таблицу в представление?

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

Дайте мне знать, если у вас есть еще вопросы или если что-то неясно.

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