NSLayoutConstraint с макетом VisualFormat - PullRequest
0 голосов
/ 27 июня 2018

NSLayoutConstraint Привет, Я пытался обернуть голову вокруг NSLayoutConstraint с помощью VisualFormat, и у меня чертовски много времени. У меня есть три этикетки, и я хочу заказать их в определенном формате, но я не могу их получить. Я делаю это в пользовательском UITableViewCell.

Я попытался нарисовать схему расположения ячеек ниже. Как мне это сделать?

--------------------------------------------------------------------------------
(10 padding)Name
                                                           ColorName(10 padding)
(10 padding)Description
--------------------------------------------------------------------------------

Ответы [ 2 ]

0 голосов
/ 28 июня 2018

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

Вам нужно будет указать высоту элементов в визуальном ограничении, чтобы все выровнялось

Вот пример кода:

let name = UITextField(frame: CGRect())
name.text = "Name"
name.translatesAutoresizingMaskIntoConstraints = false
name.backgroundColor = UIColor.red

let colorName = UITextField(frame: CGRect())
colorName.text = "ColorName"
colorName.translatesAutoresizingMaskIntoConstraints = false
colorName.backgroundColor = UIColor.gray

let description = UITextField(frame: CGRect())
description.text = "Description"
description.translatesAutoresizingMaskIntoConstraints = false
description.backgroundColor = UIColor.green

view.addSubview(name)
view.addSubview(colorName)
view.addSubview(description)

view.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "H:|-(10)-[name]", options: [], metrics: nil, views: ["name": name]))
view.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "H:[colorName]-(10)-|", options: [], metrics: nil, views: ["colorName": colorName]))
view.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "H:|-(10)-[description]", options: [], metrics: nil, views: ["description": description]))
view.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "V:|-(50)-[name]-(10)-[colorName]-(10)-[description]", options: [], metrics: nil, views: ["name": name, "colorName": colorName, "description": description]))

Для ограничения по вертикали я использовал отступ 50 сверху и 10 точек между каждым объектом. Очевидно, вы можете установить их на то, что вы хотите.

0 голосов
/ 28 июня 2018

Я бы порекомендовал пару вещей. Во-первых, не используйте визуальный макет. Apple теперь рекомендует использовать привязки ограничений в коде. Визуальное оформление может показаться простым. Но это не самый ремонтопригодный. Во-вторых, используйте IB, если можете, это просто проще и проще. И, наконец, для того, что вы делаете, используйте UIStackView вместо того, чтобы пытаться создавать ограничения самостоятельно. Опять же, проще, и он предназначен для того, чтобы делать именно то, что вы хотите.

...