У меня есть UIViewController (Главное меню), которое отображается после того, как мой другой UIViewController (Экран загрузки) завершает загрузку/синхронизацию данных из Интернета. У моего главного меню возникают проблемы, так как он не всегда отображает все UIButton, которые находятся на экране, когда он появляется! Существует несогласованность, 1 из каждых 10 раз нагрузок главного меню, все UIButtons появятся.Swift 3 - UIView не всегда отображает его содержимое
Вот как вид обычно проявляется:
Я могу понять, где UIButtons должно быть и пошевелить пальцем в сторону, и они будут появляться. Я также могу указать, где они должны быть, и мои segues все равно будут срабатывать, но UIButtons не будут автоматически отображаться. Похоже,
Я попытался добавить функцию MainMenuView.setNeedsDisplay() в функцию ViewDidLoad, и это не помогло. Я также создал тестовый UIButton в представлении, который запускает команду MainMenuView.setNeedsDisplay(), но скрытые UIButtons остаются скрытыми.
Если я покину экран на холостом ходу в течение примерно 30 секунд, все UIButtons будут случайным образом отображаться без необходимости вручную их отображать.
Главное меню выглядит нормально, и все UIButtons видны, если я перейду к нему из любой части приложения, кроме экрана загрузки.
Edit: Главное меню Code - (ссылки Strong)
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
@dfd Я добавил код. Я экспериментировал с mainMenuView.setNeedsDisplay, поэтому вы можете игнорировать его. –