#swift #uiview #constraints #uicontainerview
#swift #uiview #ограничения #uicontainerview
Вопрос:
Примечание: Прямо сейчас у меня есть программно установленные ограничения и ограничения раскадровки.
- Вопрос первый:
Если я сохраняю как программные, так и раскадровочные ограничения, я получаю ошибки в своей раскадровке, но приложение работает нормально (я заменил некоторые ограничения раскадровки программными). Но могу ли я это сделать? Согласится ли Apple с этим?
Если нет
- Вопрос второй:
У меня есть ViewController, где я помещаю два вида контейнеров, каждый с разными размерами, чтобы создать своего рода боковое меню. У меня есть большой, размером с экран, и маленький, длиной с экран, но шириной в половину экрана. Сначала я добавил свои ограничения в раскадровку, но теперь я понял, что мне нужно установить их программно, чтобы достичь того, что мне нужно. Ограничения, которые мне нужно преобразовать из раскадровки в код, следующие
БОЛЬШОЙ КОНТЕЙНЕР 375×667:
- Завершающий пробел для супервизора (или что-то, чтобы его правая сторона адаптировалась к каждому устройству, я думаю, супервизор должен работать нормально);
- Ширина и высота равны виду;
- Ведущее пространство для представления небольшого контейнера (0).
МАЛЕНЬКИЙ КОНТЕЙНЕР 240×667
- Ширина равна 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:
Вам нужно
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)
])
Комментарии:
1. Нет, ведущая привязка ограничения не равна ведущей привязке.
2. меню работает корректно в демо-версии, в чем проблема?
3. Он не может быть адаптирован к каждому размеру экрана, я хочу программно установить его ограничения, чтобы он мог быть универсальным