четкие ограничения при использовании NSLayoutAnchor

Я новичок в создании представлений без построителя интерфейса. Я использую NSLayoutAnchors для создания представлений!

когда я использую какое-то представление, созданное в viewcontroller, например:

let borderView:UIView = {

    let view = UIView()
    view.translatesAutoresizingMaskIntoConstraints = false
    view.backgroundColor = UIColor.lightGray
    view.isUserInteractionEnabled = false
    view.alpha = 0.5
    return view

}()

затем я использую это представление для границы sth в представлении следующим образом:

view.addSubview(borderView)
borderView.bottomAnchor.constraint(equalTo: headerView.bottomAnchor).isActive = true
borderView.leftAnchor.constraint(equalTo: headerView.leftAnchor).isActive = true
borderView.rightAnchor.constraint(equalTo: headerView.rightAnchor).isActive = true
borderView.heightAnchor.constraint(equalToConstant: 1).isActive = true

затем в другом представлении я пробую это:

    informationView.addSubview(borderView)

    borderView.topAnchor.constraint(equalTo: informationView.topAnchor).isActive = true
    borderView.leftAnchor.constraint(equalTo: informationView.leftAnchor).isActive = true
    borderView.rightAnchor.constraint(equalTo: informationView.rightAnchor).isActive = true
    borderView.heightAnchor.constraint(equalToConstant: 1).isActive = true

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

как я могу удалить ограничения borderView перед его повторным использованием?


person shaibow    schedule 12.04.2017    source источник
comment
Возможный дубликат Удалить все ограничения, влияющие на UIView   -  person dirtydanee    schedule 12.04.2017
comment
На самом деле это не дубликат, потому что ответ не в том, чтобы повторно использовать представление (удаление ограничений в этом случае не поможет)   -  person Lou Franco    schedule 12.04.2017


Ответы (1)


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

Чтобы ответить на вопрос, вы можете удалить ограничения из представления с помощью view.removeConstraints(view.constraints)

person Lou Franco    schedule 12.04.2017
comment
как лучше всего сделать вид границы с помощью этого метода? - person shaibow; 12.04.2017
comment
Что-то вроде: (1) не иметь свойства для него (2) создать функцию, которая принимает представление, создает новое представление границы, устанавливает ограничения и добавляет его в качестве подпрограммы к переданному представлению, поэтому вы просто делаете addBorderView(to: view) - person Lou Franco; 12.04.2017