gpt4 book ai didi

ios - Swift 3 - UIView 并不总是显示其内容

转载 作者:可可西里 更新时间:2023-11-01 02:09:47 26 4
gpt4 key购买 nike

我有一个 UIViewController(主菜单),它在我的另一个 UIViewController(加载屏幕)完成从 Web 下载/同步数据后显示。我的主菜单有问题,因为它在出现时并不总是显示 View 中的所有 UIButton!有一个不一致的地方,主菜单每加载 10 次,就有 1 次会出现所有 UIButton。

View 应如下所示:Correct View

View 通常是这样显示的:How it shows up

我可以将手指放在 UIButton 应该在的位置,然后将手指移开,它们就会出现。我也可以点击它们应该在的位置,我的 segues 仍然会触发,但 UIButtons 不会自动显示。看起来像 This

我试图将 MainMenuView.setNeedsDisplay() 添加到 ViewDidLoad 函数,但没有帮助。我还在触发 MainMenuView.setNeedsDisplay() 命令的 View 上创建了一个测试 UIButton,但隐藏的 UIButton 仍然隐藏。

如果我让屏幕闲置 30 秒左右,所有 UIButton 将随机出现,而无需我手动让它们出现。

如果我从加载屏幕以外的应用程序的任何部分转到主菜单 View ,则主菜单 View 是正常的,所有 UIButton 都可见。

编辑:主菜单代码 - (引用很强)

import UIKit
import CoreData

class MainMenuViewController: UIViewController {

// MARK: References
@IBOutlet var btnGasManifolds: UIButton!
@IBOutlet var btnAirCompressors: UIButton!
@IBOutlet var btnVacuumPumps: UIButton!
@IBOutlet var btnUnitConversion: UIButton!
@IBOutlet var btnCFMCalculator: UIButton!
@IBOutlet var mainMenuView: UIView!

var userData = [NSManagedObject]()

// MARK: Functions

override func viewDidLoad() {
var name = String()
for duserData in userData {
name = duserData.value(forKey: "nameFull") as! String
}
print("Main Menu\n->\(name)")
backgroundSetup()
}

override func viewDidAppear(_ animated: Bool) {
mainMenuView.setNeedsDisplay()
}

override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}

@IBAction func btnTest(_ sender: Any) {
mainMenuView.setNeedsDisplay()
}

override func prepare(for segue: UIStoryboardSegue, sender: Any!) {
if segue.identifier == "settingsSegue" {
let destination = segue.destination as! SettingsViewController
destination.userData = userData
}
}

// Background Setup
func backgroundSetup() {
let background = UIImage(named: "Data Screens")

var imageView : UIImageView!
imageView = UIImageView(frame: view.bounds)
imageView.contentMode = UIViewContentMode.scaleAspectFill
imageView.clipsToBounds = true
imageView.image = background
imageView.center = view.center
view.addSubview(imageView)
self.view.sendSubview(toBack: imageView)
}
}

最佳答案

从服务器获取数据后创建和显示按钮的代码需要在主 UI 线程上运行。如果代码在后台线程中运行,它将无法正确显示 UI 元素,并且在显示控件之前需要一些时间或手动滚动。

在 Dispatch 主队列上运行代码。

关于ios - Swift 3 - UIView 并不总是显示其内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41268742/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com