2015-12-18 2 views
1

В подклассе UITableViewCell я пытаюсь использовать автоматическую компоновку.Ограничение горизонтальной автоматической компоновки

Вот что я хочу сделать: layout

Вот мой код, который не работает: только один вид показан

import Foundation 

class CustomCell: UITableViewCell { 

    func configureCell() { 

     backgroundColor = UIColor.yellowColor() 

     let redColorView = UIView() 
     redColorView.backgroundColor = UIColor.redColor() 
     redColorView.translatesAutoresizingMaskIntoConstraints = false 

     let blueColorView = UIView() 
     blueColorView.backgroundColor = UIColor.blueColor() 
     blueColorView.translatesAutoresizingMaskIntoConstraints = false 

     addSubview(blueColorView) 
     addSubview(redColorView) 

     let viewsDictionary = ["blue":blueColorView,"red":redColorView] 

     let layout = NSLayoutFormatOptions(rawValue: 0) 

     let horizontalContraint:[NSLayoutConstraint] = NSLayoutConstraint.constraintsWithVisualFormat("|-10-[blue]-10-[red]-10-|", options: layout, metrics: nil, views: viewsDictionary) 

     let verticalContraint_1:[NSLayoutConstraint] = NSLayoutConstraint.constraintsWithVisualFormat("V:|-10-[blue]-10-|", options: layout, metrics: nil, views: viewsDictionary) 

     let verticalContraint_2:[NSLayoutConstraint] = NSLayoutConstraint.constraintsWithVisualFormat("V:|-10-[red]-10-|", options: layout, metrics: nil, views: viewsDictionary) 

     self.addConstraints(verticalContraint_1) 
     self.addConstraints(verticalContraint_2) 
     self.addConstraints(horizontalContraint) 
    } 
} 
+3

Любите рисунок! –

+0

Спасибо, я попытался сделать искусство ASCII, но путь к длинному (и уродливому) – Max

+0

вы настроили на использование 'constraintsWithVisualFormat'? Я мог бы, вероятно, понять это, но никогда не использовал это до –

ответ

2

Проблема в том, что ваши горизонтальные ограничения неоднозначный. Их недостаточно, чтобы разрешить ровно один макет. Таким образом, система должна выбирать произвольно из возможных возможностей.

В частности, |-10-[blue]-10-[red]-10-| не указывает, насколько широким является blue и red. Предполагая, что надзор более чем на 30 пунктов, возможно любое количество решений. blue может быть 0 шириной и red может быть шириной супервизора минус 30. Или наоборот. Или что-нибудь между ними. Единственное эффективное ограничение на ширину двух подвидных объектов - это то, что они складываются до ширины супервизора минус 30. Поскольку вы говорите, что видимо только одно, предположительно другому присваивается 0 ширина.

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

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

+0

Это имеет смысл, благодаря вашему уточнению – Max

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