У меня довольно простая настройка в моей основной раскадровке:
- Представление стека, которое включает три представления
- Первый вид имеет фиксированную высоту и содержит контроллер сегмента
- Два других представления не имеют ограничений, идея состоит в том, что одновременно будет активен только один, и, таким образом, он заполнит доступное пространство
У меня есть код, который будет иметь дело с изменением представления активных представлений следующим образом:
import Foundation
import UIKit
class ViewController : UIViewController {
@IBOutlet weak var stackView: UIStackView!
@IBOutlet weak var segmentController: UISegmentedControl!
@IBAction func SegmentClicked(_ sender: AnyObject) {
updateView(segment: sender.titleForSegment(at: sender.selectedSegmentIndex)!)
}
override func viewDidLoad() {
updateView(segment: "First")
}
func updateView(segment: String) {
UIView.animate(withDuration: 1) {
if(segment == "First") {
self.stackView.arrangedSubviews[1].isHidden = false
self.stackView.arrangedSubviews[2].isHidden = true
} else {
self.stackView.arrangedSubviews[1].isHidden = true
self.stackView.arrangedSubviews[2].isHidden = false
}
print("Updating views")
print("View 1 is \(self.stackView.arrangedSubviews[1].isHidden ? "hidden" : "visible")")
print("View 2 is \(self.stackView.arrangedSubviews[2].isHidden ? "hidden" : "visible")")
}
}
}
Как вы можете видеть, когда выбрана вкладка "Первая", должно отображаться подпредставление с индексом 1, тогда как 2 скрыто, а когда выбрано все остальное, должно отображаться подвид с индексом 2, а 1 скрыто..
Поначалу кажется, что это работает, если я медленно изменяю представления, но если я иду немного быстрее, представление с индексом 1, кажется, остается постоянно скрытым после нескольких щелчков, в результате чего представление с индексом 0 покрывает весь экран. Я разместил анимацию, показывающую проблему, и скриншот раскадровки ниже. Вывод показывает, что при возникновении проблемы оба вида остаются скрытыми при нажатии на первый сегмент.
Кто-нибудь может сказать мне, почему это происходит? Это ошибка, или я не делаю то, что должен быть?
Большое спасибо заранее!
Обновление. Кажется, я могу надежно воспроизвести проблему, перейдя к первым> вторым> третьим> вторым> первым сегментам в указанном порядке.