ios - UIView组件已加载但未显示

标签 ios swift uiview segue

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

当我使用调试 View 层次结构时,我看到组件已加载,因此,例如,如果我旋转屏幕,某些组件会出现,UIButton 不会显示,如果我触摸,则会正确响应“触摸”在它应该是元素的地方(并使其以相同的方式出现)

如果我将此 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()
    }
...
}

编辑二

我正要添加屏幕截图来显示差异,我意识到在屏幕截图上显示了所有项目,尽管设备上显然不是这样

最佳答案

问题出在您使用的库上。

向屏幕添加按钮和标签的方式几乎相同,您设置添加内容(文本、图像)的框架,向其父 View 添加 subview (无论是在 IB 中还是通过代码),如果您之后不要更改任何内容,屏幕上肯定有一个按钮或标签。

正如您提到的标签设置正确,这意味着这不是一些导致按钮不显示的奇怪错误,这只是您设置它的方式,即使用 setIcon 函数。我相信您在使用这个库时做错了一些步骤,因为我不了解这个库,我不能告诉您到底是什么,但问题就在这里。

有一种替代方法可以实现您想要的相同目标而不会出现错误,请转到 https://material.io/icons/下载你想要的图像,并使用UIKit方法setImage设置按钮的图像,你应该就可以了。

关于ios - UIView组件已加载但未显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44176443/

相关文章:

iphone - nil 和 NULL 的区别

ios - 带有阴影和圆边的 ContainerView

swift - 从 couchbase 实时查询填充 tableView

ios - 为什么我的 UIView 滚动时在 UIScrollView 内移出位置?

ios - swift 3 : Animate color fill of arc added to UIBezierPath

ios - 上次单击时如何使按钮 UIButton 保存

debugging - `po` 给出 `error: <EXPR>:1:1: error: use of unresolved identifier`

ios - 从 CoreData 中的属性中删除所有数据

iphone - 全屏 UIView 不会为其外观设置动画

ios - UIView(不是 UIViewController)是否有任何 viewDidAppear 方法?