Поиск…


Сложный StackView в примере Scrollview

Ниже приведен пример того, что можно сделать с вложенными StackViews, предоставляя пользователю впечатление непрерывного прокрутки с использованием сложных элементов пользовательского интерфейса или выравниваний.

Сложный StackView в примере Scrollview

Предотвращение неоднозначной компоновки

Частый вопрос о StackViews внутри Scrollviews возникает из-за неоднозначности с предупреждениями / heigh на построителе интерфейса. Как объяснил этот ответ , необходимо:

  1. Добавить в UIScrollView UIView (contentScrollView);
  2. В этом contentScrollView установите верхнее, нижнее, левое и правое поля на 0
  3. Установите также выравнивание по горизонтали и по вертикали;

Прокрутка к содержимому внутри вложенных StackViews

Большая информация о прокрутке состоит в том, чтобы определить смещение, необходимое для представления (например) текстовое поле внутри StackView с внутри ScrollView .

Если вы попытаетесь получить позицию Textfield.frame.minY может быть 0 , потому что кадр minY учитывает только расстояние между элементом и вершиной StackView. Таким образом, вы должны учитывать все другие родительские стеки / представления.

Хорошим обходным путем для этого является:

1 - Внедрение расширения ScrollView

extension UIScrollView {

    func scrollToShowView(view: UIView){
        var offset = view.frame.minY
        var superview = view.superview
        while((superview  != nil)){
            offset += (superview?.frame.minY)!
            superview = superview?.superview
        }
        
        offset -= 100 //optional margin added on offset
        
        self.contentOffset = CGPoint.init(x: 0, y: offset)
    }

}

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

Пример использования:

func textViewDidBeginEditing(_ textView: UITextView) {
    self.contentScrollView.scrollToShowView(view: textView)
}


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow