Как программно установить адаптируемые ограничения для представлений контейнера - PullRequest
0 голосов
/ 10 апреля 2019

NB. Прямо сейчас у меня есть программно установленные ограничения и раскадровки.

  1. Вопрос первый:

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

Если нет

  1. Вопрос второй:

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

БОЛЬШОЙ КОНТЕЙНЕР 375x667:

  • Конечное пространство для superView (или что-то, чтобы его правая сторона адаптировалась к каждому устройству, я думаю, superview должно работать нормально);
  • Ширина и высота равна виду;
  • Вывод места в маленьком контейнере (0).

МАЛЕНЬКИЙ КОНТЕЙНЕР 240x667

  • Ширина равна 240;
  • Высота равна высоте большого контейнера;

  • Конечный пробел к большому контейнеру (нет необходимости добавлять это снова здесь, если мы уже установили начальное пространство большого контейнера);

  • Выравнивание, ведущее к безопасной зоне, равно -240.

Вот что я уже сделал (правильная часть):

func containerViewsConstraints() {
 containerView1.translatesAutoresizingMaskIntoConstraints = false

        containerView1.topAnchor.constraint(equalTo: view.topAnchor).isActive = true
        containerView1.bottomAnchor.constraint(equalTo: view.bottomAnchor).isActive = true


        containerView2.translatesAutoresizingMaskIntoConstraints = false
        containerView2.topAnchor.constraint(equalTo: view.topAnchor).isActive = true
        containerView2.bottomAnchor.constraint(equalTo: view.bottomAnchor).isActive = true
}

Вот что я попробовал (не уверен, что правильно):

containerView2.bottomAnchor.constraint(equalTo: view.bottomAnchor).isActive = true
        containerView2.trailingAnchor.constraint(equalTo: view.trailingAnchor).isActive = true

    containerView2.widthAnchor.isEqual(view.widthAnchor)
        containerView2.heightAnchor.isEqual(view.heightAnchor)

        containerView1.widthAnchor.constraint(equalToConstant: 240)
        containerView1.heightAnchor.isEqual(view.heightAnchor)

1 Ответ

0 голосов
/ 10 апреля 2019

Вам нужно

bigView.backgroundColor = .red
smallView.backgroundColor = .green 
bigView.translatesAutoresizingMaskIntoConstraints = false
smallView.translatesAutoresizingMaskIntoConstraints = false
view.addSubview(bigView)
view.addSubview(smallView)
NSLayoutConstraint.activate([

    bigView.topAnchor.constraint(equalTo: view.topAnchor),
    bigView.bottomAnchor.constraint(equalTo: view.bottomAnchor),
    bigView.leadingAnchor.constraint(equalTo: view.leadingAnchor),
    bigView.trailingAnchor.constraint(equalTo: view.trailingAnchor),

    smallView.topAnchor.constraint(equalTo: view.topAnchor),
    smallView.bottomAnchor.constraint(equalTo: view.bottomAnchor),
    smallView.leadingAnchor.constraint(equalTo: view.leadingAnchor),
    smallView.widthAnchor.constraint(equalTo: view.widthAnchor,multiplier:0.5)

])
...