我的应用有 2 个屏幕:
TableViewVC(这里没有堆栈视图)
DetailVC(这里所有嵌套的堆栈视图;请参阅图片链接:嵌套堆栈视图图片)-注意,这些堆栈视图中有标签和图像。
当您按下 tableview 中的一个单元格时,它会将信息从 TableViewVC 传递到 DetailVC。问题在于在 DetailVC 中隐藏特定的 UIStackViews。我希望 DetailVC 中的各种堆栈视图中只有 2 个堆栈视图在视图加载后立即隐藏。所以我在 DetailVC 中编写了这段代码来完成这个:
override func viewDidLoad() {
super.viewDidLoad()
self.nameLabel.text = "John"
self.summaryStackView.hidden = true
self.combinedStackView.hidden = true
}
一切看起来都很棒,但 Xcode 只在运行时给出许多警告。当应用程序未运行时,Storyboard 中没有警告。请参阅链接以获取错误图片:错误图片
基本上这是很多 UISV 隐藏、UISV 间距、UISV 画布连接错误。如果我在其中隐藏相同的堆栈视图,这些错误就会消失,viewDidAppear
但是应该隐藏的东西会闪现,然后它会隐藏起来。用户短暂地看到视图,然后隐藏起来,这是不好的。
很抱歉无法实际发布图片而不是链接,但仍然不能这样做。
对于如何解决这个问题,有任何的建议吗?这是针对我实际上想要发布到应用商店的应用程序 - 这是我的第一个应用程序,所以任何帮助都会很棒!
编辑/更新 1:
我找到了一个解决此代码的小方法,我将它放在名为 DetailVC 的第二个屏幕中:
// Function I use to delay hiding of views
func delay(delay: Double, closure: ()->()) {
dispatch_after(
dispatch_time(
DISPATCH_TIME_NOW,
Int64(delay * Double(NSEC_PER_SEC))
),
dispatch_get_main_queue(), closure)
}
// Hide the 2 stack views after 0.0001 seconds of screen loading
override func awakeFromNib() {
delay(0.001) { () -> () in
self.summaryStackView.hidden = true
self.combinedStackView.hidden = true
}
}
// Update view screen elements after 0.1 seconds in viewWillAppear
override func viewWillAppear(animated: Bool) {
super.viewWillAppear(animated)
delay(0.1) { () -> () in
self.nameLabel.text = "John"
}
}
这完全摆脱了 Xcode 中关于布局约束的警告。
它仍然不完美,因为有时我会瞥见应该隐藏的视图——它们在屏幕上快速闪烁然后消失。不过这发生得太快了。
关于为什么这会消除警告的任何建议?另外,关于如何改进它以使其完美运行的任何建议???谢谢!