Прокрутка Просмотр вопроса динамической высоты - PullRequest
0 голосов
/ 01 октября 2019

В моем приложении у меня есть Scroll View с динамической высотой. Внутри него есть одно текстовое представление и одно табличное представление - и с динамической высотой и с прокруткой отключено. Эти два элемента представлены только один раз за раз, поэтому, если текстовое представление видно, то табличное представление не отображается.

Моя проблема заключается в том, что после загрузки экрана высота представления прокрутки не рассчитывается правильно и при переключенииВпервые к табличному виду - он покрыт фоном UIView.

Вот как это выглядит:

Первое изображение - экран только что открылся, начальная позиция.

Второе изображение - переключено в табличное представление, где оно покрыто видом bg. First position Second position

Вот мой код:

override func viewDidLoad() {
    super.viewDidLoad()
    output?.viewIsReady()

    setSpeakerData()

    contentTableView.register(UINib(nibName: "SpeakerEventsTableViewCell", bundle: nil), forCellReuseIdentifier: "speakerEventsTableViewCell")
}

override func viewWillAppear(_ animated: Bool) {
    showSpeakerInfo()
}

func showSpeakerInfo() {
    aboutSpeakerTextView.isHidden = false
    contentTableView.isHidden = true
    aboutSpeakerTextView.sizeToFit()
    aboutSpeakerView.backgroundColor = blueColor
    eventsView.backgroundColor = UIColor.clear
    contentTableViewHeight.constant = aboutSpeakerTextView.frame.height
}

func showSpeakerEvents() {
    aboutSpeakerTextView.isHidden = true
    contentTableView.isHidden = false
    aboutSpeakerView.backgroundColor = UIColor.clear
    eventsView.backgroundColor = blueColor
    contentTableViewHeight.constant = contentTableView.contentSize.height
    contentTableView.reloadData()
}

Странно то, что при переключении между вкладками несколько раз -все начинает работать должным образом, и табличное представление не покрывается фоном UIView.

Был бы признателен за любую помощь! Заранее спасибо!

1 Ответ

0 голосов
/ 01 октября 2019

Дальнейшее обнаружение показало, что эта ошибка появляется только тогда, когда текстовое представление имело 1 строку текста. Когда у него было 2+ строки - он исчезал. Я не знаю, привели ли к этому Xcode, Swift или я)

Итак, чтобы преодолеть эту ошибку, я добавил одну строку открытого текста в свой исходный текст, полученный с сервера, и он работал так, как онследует.

Это не рекомендуемое решение, но поскольку оно работает - почему бы и нет.

Вот как выглядит мой код прямо сейчас:

func setSpeakerData() {
    let originalTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor(red: 0.41, green: 0.43, blue: 0.51, alpha: 1.0),
                          NSAttributedString.Key.font: UIFont(name: "Roboto-Light", size: 14.0) as Any]
    let dummyTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.clear,
                               NSAttributedString.Key.font: UIFont.systemFont(ofSize: 15)]

    let partOne = NSMutableAttributedString(string: speaker[0].speakerDetailedText, attributes: originalTextAttributes)
    let partTwo = NSMutableAttributedString(string: randomText, attributes: dummyTextAttributes)

    let combination = NSMutableAttributedString()

    combination.append(partOne)
    combination.append(partTwo)

    speakerImageView.kf.setImage(with: URL(string: speaker[0].speakerImage), placeholder: UIImage(named: "PlaceholderImage"))
    speakerNameLabel.text = speaker[0].speakerName
    speakerPositionLabel.text = speaker[0].speakerPosition

    aboutSpeakerTextView.attributedText = combination
}
...