#xcode #constraints #scrollview #stackview
#xcode #ограничения #scrollview #stackview
Вопрос:
У меня есть scrollView
с stackView
размещенным в нем. scrollView
Ограничено rootview
. В представлении стека будет отображаться представление xib.
Все представления xib имеют разную длину. Представления xib помечены simpleVC0
и simpleVC1
. Длина simpleVC0
равна 2500, а длина simpleVC1
равна 1000.
Моя проблема заключается в том, что когда представления xib представлены в представлении стека, длина scrollView
не изменяется на длину представленного представления xib. Похоже, что представлен вид xib, но вид прокрутки заблокирован на определенной длине.
Вот simpleVC0
представление xib. за ним следует при запуске. Когда я пытаюсь прокрутить, это не позволяет мне прокручивать до нижней части представления xib. кажется, что представление xib отключается на определенной длине. Я прав, говоря, что, возможно, это проблема, которую, возможно, придется решать в коде? или это может быть решено из-за ограничений. Я пробовал ограничения автоматической компоновки, однако они не сработали.
Я ограничил scrollView
rootview
со всех четырех сторон. При загрузке корневого представления xibs устанавливаются с использованием следующего кода:
//Different subViews for ingredients and steps
if counter == 0 {
simpleViewX = SimpleVC0().view
simpleViewY = SimpleVC1().view
stack.addArrangedSubview(simpleViewX)
stack.addArrangedSubview(simpleViewY)
}
Представления являются скрытыми, отображаемыми путем изменения значения контроллера сегментированного представления. Показано ниже:
@IBAction func tabselected(_ sender: Any) {
switch (sender as AnyObject).selectedSegmentIndex {
case 0:
simpleViewY.isHidden = true
simpleViewX.isHidden = false
break
case 1:
simpleViewX.isHidden = true
simpleViewY.isHidden = false
break
case 2:
//calledvideo in array is the value of the counter.
calledVideo = vids[counter]
geturl()
break
default:
break
}
}
Комментарии:
1. Покажите, как вы загружаете содержимое xib.
2. @DonMag просто обновил его там, чтобы показать, как вызываются xibs.
Ответ №1:
Чтобы использовать a UIStackView
с a UIScrollView
, вам нужно разрешить увеличивать высоту представления стека в зависимости от его содержимого.
При размещении в storyboard задайте для stack view ограничение по высоте (чтобы удовлетворить требованиям IB), но присвоите этому ограничению по высоте низкий приоритет.
Затем, при добавлении упорядоченных вложенных представлений, вид стека будет расти вертикально.
Вот полный пример, основанный на показанных вами изображениях:https://github.com/DonMag/XIBsInScrollView
Комментарии:
1. Спасибо, мой друг, ты не понимаешь, как сильно ты помог. Мне потребовалось два дня, чтобы поиграть с этим, без шуток. Еще раз спасибо, ценю это.
Ответ №2:
Вы должны изменить свойство contentSize вашего ScrollView в коде. Я не знаю, как справиться с этим с помощью раскадровок, но вы можете создать выход из своего ScrollView и вычислять новую высоту при каждом ее изменении (каждый раз, когда вы что-то добавляете или удаляете что-то в нем)
scrollView.contentSize = CGSize(width:yourNewW, height:yourNewH)
Комментарии:
1. Лучше использовать автоматическую компоновку и ограничения.
2. Честно говоря, я отказался от смешивания ScrollView с автозапуском, каждый раз, когда я пытался, это был кошмар ошибок. С моей точки зрения, гораздо точнее и эффективнее вычислять старые простые координаты при работе с содержимым scrollview