我有一个不显示其所有组件的ViewController。 我使用performSegue来实现这个VC。 这些组件是UILabel和一到两个UIButton,它取决于时间。
当我使用Debug View Hierarchy时,我看到组件已加载,因此,例如,如果我旋转屏幕,有些显示,UIButton未显示,如果我触摸则正确响应“Touch”在它应该是元素的地方(并以相同的方式显示)
如果我将这个VC放在“Root View Controller”中,我也没有问题,只能从Segue中获取。
您对问题的原因有什么想法吗?
编辑我
我忘了说在后台移动应用程序并返回它也可以使组件显示出来。
viewDidLoad& viewDidAppear函数
class CameraView: UIViewController {
@IBOutlet weak var titleUI: UILabel!
@IBOutlet weak var cancelUI: UIButton!
@IBOutlet weak var flipUI: UIButton!
@IBOutlet weak var captureUI: UIButton!
@IBOutlet weak var previewUI: UIView!
@IBOutlet weak var flashUI: UIButton!
@IBOutlet weak var touchUI: UIView!
@IBOutlet weak var retryUI: UIButton!
@IBOutlet weak var validateUI: UIButton!
@IBOutlet weak var resultUI: UIImageView!
var callBack: (Int, UIImage?) -> Void = {
(status: Int, image: UIImage?) -> Void in
}
private var cameraHandler = CameraManager()
private var flash: CameraFlashMode = .off
override func viewDidLoad() {
cancelUI.setIcon(icon: .googleMaterialDesign(.reply), iconSize: 45, color: .white, forState: .normal)
flipUI.setIcon(icon: .googleMaterialDesign(.switchCamera), iconSize: 45, color: .white, forState: .normal)
captureUI.setIcon(icon: .googleMaterialDesign(.cameraAlt), iconSize: 45, color: .white, forState: .normal)
flashUI.setIcon(icon: .googleMaterialDesign(.flashOff), iconSize: 45, color: .white, forState: .normal)
retryUI.setIcon(prefixText: "", prefixTextColor: .white, icon: .googleMaterialDesign(.chevronLeft), iconColor: .white, postfixText: "Retry", postfixTextColor: .white, forState: .normal, textSize: 15, iconSize: 20)
validateUI.setIcon(prefixText: "", prefixTextColor: .white, icon: .googleMaterialDesign(.done), iconColor: .white, postfixText: "Save", postfixTextColor: .white, forState: .normal, textSize: 15, iconSize: 20)
resultUI.clipsToBounds = true
resultUI.contentMode = .scaleAspectFit
cancelUI.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(self.cancel)))
captureUI.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(self.capture)))
flashUI.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(self.switchFlashMode)))
flipUI.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(self.turnCamera)))
validateUI.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(self.validate)))
retryUI.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(self.retry)))
cameraHandler.cameraDevice = .back
cameraHandler.showAccessPermissionPopupAutomatically = false
cameraHandler.flashMode = flash
cameraHandler.animateCameraDeviceChange = true
cameraHandler.cameraOutputMode = .stillImage
cameraHandler.cameraOutputQuality = .high
cameraHandler.writeFilesToPhoneLibrary = false
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
cameraHandler.askUserForCameraPermission{result in
if !result {
self.callBack(PERMISSION_REFUSED, nil)
self.close(reason: PERMISSION_REFUSED)
}
}
self.view.setNeedsDisplay()
retry()
}
...
}
编辑II
我准备添加截图以显示差异,我意识到在屏幕截图中显示了所有项目,尽管设备上的情况显然并非如此
答案 0 :(得分:0)
问题在于您使用的库。
向屏幕添加按钮和标签的方式几乎相同,您设置添加内容(文本,图像)的框架,将子视图添加到其父级(无论是在IB中还是通过代码),如果您之后不要改变任何东西,你肯定在屏幕上有一个按钮或标签。
正如你所提到的那样,标签设置正确,这意味着这并不是导致按钮无法显示的一些奇怪的错误,它只是你设置它的方式,即使用{{1功能。我相信你使用这个库有一些错误,因为我不知道图书馆,我不能告诉你究竟是什么,但问题出在这里。
有一种替代方法可以实现您想要的无错误,转到https://material.io/icons/下载您想要的图像,并使用setIcon
方法设置按钮的图像{ {1}},你应该把它弄好。