【发布时间】:2016-12-22 02:02:03
【问题描述】:
我有一个 UIViewController(主菜单),在我的其他 UIViewController(加载屏幕)完成从网络下载/同步数据后显示。我的主菜单有问题,因为它并不总是显示视图上的所有 UIButtons !存在不一致,主菜单每加载 10 次就有 1 次出现所有 UIButton。
我可以将手指放在 UIButton 应该在的位置,然后将手指移开,它们就会出现。我也可以点击它们应该在的位置,我的 segues 仍然会触发,但 UIButtons 不会自动显示。好像是
我尝试将 MainMenuView.setNeedsDisplay() 添加到 ViewDidLoad 函数,但没有帮助。我还在视图上创建了一个测试 UIButton,它触发 MainMenuView.setNeedsDisplay() 命令,但隐藏的 UIButtons 仍然隐藏。
如果我让屏幕闲置 30 秒左右,所有 UIButton 都会随机出现,而无需我手动让它们出现。
主菜单视图是正常的,如果我从应用程序的任何部分(除了加载屏幕)转到它,所有 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)
}
}
【问题讨论】:
-
如果您为此视图发布代码会有所帮助。谢谢。
-
@dfd 我添加了代码。我正在试验 mainMenuView.setNeedsDisplay,所以你可以忽略它。