2017-05-25 113 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按鈕的圖像的選擇,你應該得到它的權利呢。