#ios #swift #xcode #uiscrollview #uikit
#iOS #swift #xcode #uiscrollview #uikit
Вопрос:
Я довольно новичок в разработке приложений для iOS. Я пытаюсь создать приложение для iOS, которое будет иметь вид горизонтальной прокрутки с метками, добавленными в качестве вложенных представлений, которые демонстрируют поведение привязки. Я использую UIKit и автоматические макеты (Swift 5, Xcode 12.01) для программного построения пользовательского интерфейса. У меня есть три метки, которые нужно добавить в вид прокрутки: одна расположена по центру, одна смещена на 500 пт от центра прокрутки (справа), а одна находится на -500 от центра (слева)
Когда я пытаюсь установить конечную привязку scrollview, ссылающуюся на метку справа, у меня нет проблем. Однако, когда я пытаюсь установить передний край, ссылающийся на метку слева (передний край), я сталкиваюсь с ошибкой: [LayoutConstraints] Невозможно одновременно удовлетворять ограничениям.
Я что-то упускаю? Я прилагаю свой код ниже:
// Create scroll view on top of bottom view
func createScrollView() -> UIScrollView {
let myScrollView = UIScrollView()
myScrollView.isScrollEnabled = true
myScrollView.backgroundColor = .red
myScrollView.showsHorizontalScrollIndicator = true
view.addSubview(myScrollView)
// Constraints
myScrollView.translatesAutoresizingMaskIntoConstraints = false
myScrollView.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 0).isActive = true
myScrollView.trailingAnchor.constraint(equalTo: view.trailingAnchor).isActive = true
myScrollView.bottomAnchor.constraint(equalTo: bottomView.firstBaselineAnchor).isActive = true
myScrollView.heightAnchor.constraint(equalToConstant: 50).isActive = true
// Add some elements to the view
let label1 = UILabel()
let label2 = UILabel()
let label3 = UILabel()
label1.text = "EV 0."
label1.font = .systemFont(ofSize: 20)
label1.translatesAutoresizingMaskIntoConstraints = false
label2.text = "ISO"
label2.font = .systemFont(ofSize: 20)
label2.translatesAutoresizingMaskIntoConstraints = false
label3.text = "SNAP"
label3.font = .systemFont(ofSize: 20)
label3.translatesAutoresizingMaskIntoConstraints = false
// Add labels to scroll view
myScrollView.addSubview(label1)
myScrollView.addSubview(label2)
myScrollView.addSubview(label3)
// Add constraint
label1.centerYAnchor.constraint(equalTo: myScrollView.centerYAnchor).isActive = true
label2.centerYAnchor.constraint(equalTo: myScrollView.centerYAnchor).isActive = true
label3.centerYAnchor.constraint(equalTo: myScrollView.centerYAnchor).isActive = true
label1.centerXAnchor.constraint(equalTo: myScrollView.centerXAnchor, constant: -300).isActive = true
label2.centerXAnchor.constraint(equalTo: myScrollView.centerXAnchor, constant: 300).isActive = true
label3.centerXAnchor.constraint(equalTo: myScrollView.centerXAnchor, constant: 0).isActive = true
// Add last constraint in the scroll view
myScrollView.leadingAnchor.constraint(equalTo: label1.leadingAnchor, constant: -500).isActive = true
myScrollView.trailingAnchor.constraint(equalTo: label2.trailingAnchor, constant: 500).isActive = true
return myScrollView
Большое спасибо за вашу помощь!!!
Комментарии:
1. Не совсем понятно, что вы пытаетесь сделать… Вы хотите добавить вид прокрутки шириной
view
в 3 метки, расположенные на расстоянии 300 пунктов друг от друга, и начать с центральной метки, центрированной по горизонтали в виде прокрутки?2. У вас противоречивые ограничения. Вы пытаетесь установить label1 равным -300 от центра ScrollView, но также устанавливаете передний край ScrollView равным -500 от переднего края label1 и 0 от переднего края self.view.
3. @clawesome: по сути, я пытаюсь переопределить первый набор ограничений (относительный self.view), чтобы динамически добавлять метки к виду прокрутки, а затем настраивать его размер. Есть ли причина, по которой это работает справа? В принципе, я думал, что это должна быть та же процедура, но с отрицательными смещениями слева. Я ошибаюсь?
4. @DonMag: я хотел бы начать с просмотра прокрутки шириной
view
, а затем добавить метки, начиная с центра. Как я уже писал, моя логика работает справа, но я никогда не смогу прокручивать вид прокрутки влево больше, чемview.leadingAnchor
5. Можете ли вы дать обзор того, как вы хотите, чтобы метки и вид прокрутки были выложены?