У меня есть контроллер представления, созданный в раскадровке, и он содержит (проверьте изображение для справки)
ScrollerView
a. StackViewA (изображение: зеленый)
i. LabelA
ii. Метка B
b. StackViewB (изображение: зеленый)
i. LabelC
ii. LabelD
Я получаю данные из API и могу показать эти данные в этих метках.
Теперь третий набор данных, который я выбираю, является динамическимЭто означает, что может быть еще 2 StackView (изображение: красный) под вторым StackView или еще 3 и т. д. Я предполагаю, что у меня есть дополнение, которое StackView программно в контроллере внутри цикла, так что создается в соответствии с циклом.
В настоящее время мой 3-й StackView также создается в раскадровке, и поэтому он показывает только последние данные из 3-го набора после их циклического просмотра.
Как мне решить эту проблему?
Подробнеев частности:
Как добавить StackView внутри ScrollerView, созданного в раскадровке.
Как мне его разместить, чтобы расположить под2nd StackView также создан в раскадровке.
![Check image for reference](https://i.stack.imgur.com/NvEyT.png)
Обновление
class InfoDetailsViewController: UIViewController {
// MARK: - Outlets
@IBOutlet weak var infoStack: UIStackView!
@IBOutlet weak var mainScroll: UIScrollView!
static var apiResp: APIDetailsResponse.APIReturn?
let infos: [APIDetailsResponse.Info] = (APIDetailsViewController.apiResp?.content?.infos)!
override func viewDidLoad() {
super.viewDidLoad()
infoStack.spacing = 25.0
for info in infos {
let addInfoTitle = UILabel()
addInfoTitle.font = .preferredFont(forTextStyle: .body)
addInfoTitle.backgroundColor = .orange
addInfoTitle.translatesAutoresizingMaskIntoConstraints = false
let addInfoContent = UITextView()
addInfoContent.font = .preferredFont(forTextStyle: .body)
addInfoContent.backgroundColor = .green
addInfoContent.translatesAutoresizingMaskIntoConstraints = false
addInfoTitle.text = "\(String(describing: (info.info_title)!))"
let htmlString = "\(String(describing: (info.information)!))"
// works even without <html><body> </body></html> tags, BTW
let data = htmlString.data(using: String.Encoding.unicode)!
let attrStr = try? NSAttributedString(
data: data,
options: [NSAttributedString.DocumentReadingOptionKey.documentType: NSAttributedString.DocumentType.html],
documentAttributes: nil)
addInfoContent.attributedText = attrStr
let childStackView = UIStackView(arrangedSubviews: [addInfoTitle, addInfoContent])
childStackView.alignment = .fill
childStackView.axis = .vertical
childStackView.distribution = .fill
childStackView.spacing = 5.0
childStackView.translatesAutoresizingMaskIntoConstraints = false
infoStack.addArrangedSubview(childStackView)
}
}
В настоящее время у меня есть это. То, что происходит сейчас, независимо от того, сколько данных возвращает массив, я всегда получаю заголовок и контент для первого и единственного заголовка для каждой последовательной информации.