2017-05-25 122 views
0

我有一个ViewController不显示其所有组件。 我使用performSegue来实现这个VC。 这些组件是一个UILabel和一到两个UIButton,它取决于时间。已加载但未显示UIView组件

当我使用调试视图层次结构时,我看到组件被加载,所以,例如,如果我旋转屏幕,出现一些UIButton不显示,如果我对“触摸”做出正确响应触摸它应该是元素的地方(并使其以相同的方式出现)

我也没有问题,如果我把这个VC放在“根视图控制器”,只能从塞格。

你对这个问题的原因有什么想法吗?

编辑我

我忘了说,移动在后台的应用程序并返回到它也能够使显示的组件。

下面的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

考虑到如果你旋转屏幕,你可以看到这些UI元素,你的Autolayout可能没有正确设置。在其他屏幕尺寸的设备上会发生什么? –

+1

请添加一些屏幕截图或代码。 –

+0

添加完成的工作。 –

回答

0

问题出在您使用的库上。

向屏幕添加按钮和标签的方式几乎完全相同,您可以设置添加内容的框架(文本,图像),将子视图添加到其父项(无论是在IB还是代码中),以及如果之后你不会改变任何东西,你肯定在屏幕上有一个按钮或一个标签。

正如你所提到的标签设置正确,这意味着这不是一些奇怪的错误,导致按钮不显示,它只是你设置它的方式,这是使用setIcon函数。我相信你使用这个库有一些步骤是错误的,因为我不知道这个库,我不能确切地告诉你是什么,但问题在这里。

有达到你希望同样的事情没有错误,请访问https://material.io/icons/下载你想要的图像,并设置与UIKit方法setImage按钮的图像的选择,你应该得到它的权利呢。