iOS
UIScrollView с дочерним элементом StackView
Поиск…
Сложный StackView в примере Scrollview
Ниже приведен пример того, что можно сделать с вложенными StackViews, предоставляя пользователю впечатление непрерывного прокрутки с использованием сложных элементов пользовательского интерфейса или выравниваний.
Предотвращение неоднозначной компоновки
Частый вопрос о StackViews внутри Scrollviews возникает из-за неоднозначности с предупреждениями / heigh на построителе интерфейса. Как объяснил этот ответ , необходимо:
- Добавить в UIScrollView UIView (contentScrollView);
- В этом contentScrollView установите верхнее, нижнее, левое и правое поля на 0
- Установите также выравнивание по горизонтали и по вертикали;
Прокрутка к содержимому внутри вложенных 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)
}