Преобразовать язык визуального формата в NSLayoutConstraint или Layout Anchors?

Я видел следующий кусок кода:

    override func viewDidLoad() {
    super.viewDidLoad()

    scrollView = UIScrollView()
    scrollView.translatesAutoresizingMaskIntoConstraints = false
    view.addSubview(scrollView)

    view.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("H:|[scrollView]|", options: .AlignAllCenterX, metrics: nil, views: ["scrollView": scrollView]))
    view.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:|[scrollView]|", options: .AlignAllCenterX, metrics: nil, views: ["scrollView": scrollView]))


    stackView = UIStackView()
    stackView.translatesAutoresizingMaskIntoConstraints = false
    stackView.axis = .Vertical
    scrollView.addSubview(stackView)

    scrollView.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("H:|[stackView]|", options: NSLayoutFormatOptions.AlignAllCenterX, metrics: nil, views: ["stackView": stackView]))
    scrollView.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:|[stackView]", options: NSLayoutFormatOptions.AlignAllCenterX, metrics: nil, views: ["stackView": stackView]))

    for _ in 1 ..< 100 {
        let vw = UIButton(type: UIButtonType.System)
        vw.setTitle("Button", forState: .Normal)
        stackView.addArrangedSubview(vw)
    }
}

Это часть простой демонстрации, которая делает UIStackView работать с UIScrollView,

К сожалению, все ограничения сделаны с языком визуального формата вместо NSLayoutConstraint или новый API привязки макета IOS.

Можно ли переписать этот файл с заменой ограничений языка визуального формата на NSLayoutConstraints или даже лучше API-интерфейс Layout Anchor и как он будет выглядеть?

Пока я попробовал это, и это не сработало:

 override func viewDidLoad() {
    super.viewDidLoad()

    scrollView = UIScrollView()
    scrollView.translatesAutoresizingMaskIntoConstraints = false
    view.addSubview(scrollView)


    scrollView.heightAnchor.constraintEqualToAnchor(view.heightAnchor).active = true
    scrollView.widthAnchor.constraintEqualToAnchor(view.widthAnchor).active = true
    scrollView.topAnchor.constraintEqualToAnchor(view.topAnchor).active = true
    scrollView.leadingAnchor.constraintEqualToAnchor(view.leadingAnchor).active = true


    stackView = UIStackView()
    stackView.translatesAutoresizingMaskIntoConstraints = false
    stackView.axis = .Vertical
    scrollView.addSubview(stackView)

    stackView.heightAnchor.constraintEqualToAnchor(scrollView.heightAnchor).active = true
    stackView.widthAnchor.constraintEqualToAnchor(scrollView.widthAnchor).active = true
    stackView.topAnchor.constraintEqualToAnchor(scrollView.topAnchor).active = true
    stackView.leadingAnchor.constraintEqualToAnchor(scrollView.leadingAnchor).active = true

    for _ in 1 ..< 100 {
        let vw = UIButton(type: UIButtonType.System)
        vw.setTitle("Button2", forState: .Normal)
        stackView.addArrangedSubview(vw)
    }
}

1 ответ

Да, конечно, это возможно. Вы хотите, чтобы мы сделали это для вас?

Другие вопросы по тегам