Helpers - компьютеры, интернет, программирование

ScrollView с StackView Inside программно без прокрутки

Я программно делаю UIScrollView с UIStackView внутри.

UIScrollView не прокручивается, хотя находящийся внутри UIStacVview имеет гораздо большую ширину.

Вот мой код:

    view.backgroundColor = UIColor(red: 0.161, green: 0.165, blue: 0.188, alpha: 1.00) // 292a30

    view1.backgroundColor = UIColor.green
    view2.backgroundColor = UIColor.yellow
    view3.backgroundColor = UIColor.gray
    view4.backgroundColor = UIColor.white
    view5.backgroundColor = UIColor.orange

    scrollView.backgroundColor = UIColor.red
    scrollView.frame = CGRect(x: 10, y: 100, width: view.frame.width - 20, height: 100)
    scrollView.translatesAutoresizingMaskIntoConstraints = false

    stackView.backgroundColor = UIColor.blue
    stackView.axis = .horizontal
    stackView.spacing = 10
    stackView.distribution = .fillEqually
    stackView.frame = CGRect(x: 0, y: 0, width: view.frame.width + 200, height: 100)
    stackView.addArrangedSubview(view1)
    stackView.addArrangedSubview(view2)
    stackView.addArrangedSubview(view3)
    stackView.addArrangedSubview(view4)
    stackView.addArrangedSubview(view5)

    scrollView.addSubview(stackView)
    view.addSubview(scrollView)

Что работает:

  1. UIStackView загружается и выглядит так:

  1. UIStackView тянется к стороне UIScrollView.

Что не работает:

  1. Вы не можете прокручивать с помощью UIScrollView, как будто его там нет.

Ответы:


1

1 - Когда вы используете макет кадра, не устанавливайте:

scrollView.translatesAutoresizingMaskIntoConstraints = false 

(Это когда вы устанавливаете ограничения программно.)

2 - Для scrollView используйте:

scrollView.contentSize = CGSize(width: 200 * 5, height: 100)

(Выше я предполагаю, что ширина каждого вида равна 200, а их количество равно 5.)

ИЛИ

Используйте ограничения.

24.11.2018
  • удалить scrollView.frame = etc.. и заменить его на 2? 24.11.2018

  • 2

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

    func createHorizontalStackViewsWithScroll() {
    
     self.view.addSubview(stackScrollView)
     stackScrollView.translatesAutoresizingMaskIntoConstraints = false
     stackScrollView.heightAnchor.constraint(equalToConstant: 85).isActive = true
     stackScrollView.leadingAnchor.constraint(equalTo: self.view.leadingAnchor).isActive = true
     stackScrollView.trailingAnchor.constraint(equalTo: self.view.trailingAnchor).isActive = true
     stackScrollView.bottomAnchor.constraint(equalTo: visualEffectViews.topAnchor).isActive = true
     stackScrollView.addSubview(stackView)
    
     stackView.translatesAutoresizingMaskIntoConstraints = false
     stackView.topAnchor.constraint(equalTo: stackScrollView.topAnchor).isActive = true
     stackView.leadingAnchor.constraint(equalTo: stackScrollView.leadingAnchor).isActive = true
     stackView.trailingAnchor.constraint(equalTo: stackScrollView.trailingAnchor).isActive = true
     stackView.bottomAnchor.constraint(equalTo: stackScrollView.bottomAnchor).isActive = true
     stackView.heightAnchor.constraint(equalTo: stackScrollView.heightAnchor).isActive = true
    
     stackView.distribution = .equalSpacing
     stackView.spacing = 5
     stackView.axis = .horizontal
     stackView.alignment = .fill
    
    
     for i in 0 ..< images.count {
     let photoView = UIButton.init(frame: CGRect(x: 0, y: 0, width: 85, height: 85))
     // set button image
     photoView.translatesAutoresizingMaskIntoConstraints = false
     photoView.heightAnchor.constraint(equalToConstant: photoView.frame.height).isActive = true
     photoView.widthAnchor.constraint(equalToConstant: photoView.frame.width).isActive = true
    
     stackView.addArrangedSubview(photoView)
     }
     stackView.setNeedsLayout()
    
     }
    
    27.01.2019
    Новые материалы

    Интуитивное понимание тензоров в машинном обучении
    Тензор является важной концепцией во многих научных областях, таких как математика, физика, обработка сигналов и компьютерное зрение, и это лишь некоторые из них. В математике тензор — это..

    Использование машинного обучения для диагностики болезни Альцгеймера, часть 4
    Маркеры семантической согласованности для ранней диагностики болезни Альцгеймера (arXiv) Автор: Давиде Колла , Маттео Дельсанто , Марко Агосто , Бенедетто Витиелло , Даниэле Паоло Радичони..

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

    Анимированный математический анализ
    Использование Manim для создания математических анимированных визуализаций Визуализация данных помогает понять скрытые закономерности в данных, которые невозможно визуализировать..

    Создание простого слайдера изображений с помощью JavaScript
    Узнайте, как создать базовый слайдер изображений с помощью HTML, CSS и JavaScript. Введение В этом уроке мы создадим удобный слайдер изображений, используя JavaScript, HTML и CSS. Ползунок..

    Создание базы данных с помощью супергероя «Python»
    В этом посте мы узнаем, как создать «базу данных SQLite с помощью модуля python sqlite3, создав простую функцию входа и регистрации. Готовы ли вы к этому путешествию? Если да , давайте приступим..

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