iOS 按钮可点击但不可见
iOS button is clickable but not visible
我有一个视图(我们称它为 scanView)可以打开摄像头以扫描二维码。我在上面放了一个按钮,可以打开或关闭闪光灯。我面临的问题是按钮被点击但它不可见,即,我可以通过点击我放置按钮的屏幕来打开或关闭闪光灯,但按钮不可见。我检查了按钮的 Alpha,也尝试将子视图放在前面。什么都不管用。是否与 iOS 的 QR reader 有关?
下面是 QR Reader:
的实现
captureSession = AVCaptureSession()
guard let videoCaptureDevice = AVCaptureDevice.default(for: .video) else { return }
let videoInput: AVCaptureDeviceInput
do {
videoInput = try AVCaptureDeviceInput(device: videoCaptureDevice)
} catch {
return
}
if (captureSession.canAddInput(videoInput)) {
captureSession.addInput(videoInput)
} else {
failed()
return
}
let metadataOutput = AVCaptureMetadataOutput()
if (captureSession.canAddOutput(metadataOutput)) {
captureSession.addOutput(metadataOutput)
metadataOutput.setMetadataObjectsDelegate(self, queue: DispatchQueue.main)
metadataOutput.metadataObjectTypes = [.qr]
} else {
failed()
return
}
previewLayer = AVCaptureVideoPreviewLayer(session: captureSession)
previewLayer.frame = scanView.layer.bounds
previewLayer.videoGravity = .resizeAspectFill
scanView.layer.addSublayer(previewLayer)
captureSession.startRunning()
正如您在上面看到的那样,为了清晰起见,我也添加了背景颜色和背景图像。根据我的说法,按钮在层次结构中看起来很好。
在这个 scanView 上,我从我的 xib 文件中添加按钮
首先,它可能与 QR Reader 实现无关。
其次,问问自己按钮应该如何显示?标题?图片?
第三,您可以随时在 运行 应用程序时按 'Debug View Hierarchy' 按钮,以停止其执行并查看屏幕上显示的所有视图。
'Debug View Hierarchy' 按钮位于放置其他调试工具(如断点)下方的同一“调试工具”窗格中。
了解如何使用 Debug View Hierarchy
,这样您就可以清楚地看到按钮在屏幕上的位置以及它不可见的原因。
我认为您的按钮图像有问题,因为您可以单击按钮但看不到它,请确保图像已正确添加到按钮上。
记住一件事,如果它是可点击的,那么它就在那里,关注它的呈现。还尝试为其添加背景颜色并删除图像,以确保您的其他实现正常工作。
我设法通过设置按钮的 zposition 解决了这个问题。谢谢大家的宝贵时间
我有一个视图(我们称它为 scanView)可以打开摄像头以扫描二维码。我在上面放了一个按钮,可以打开或关闭闪光灯。我面临的问题是按钮被点击但它不可见,即,我可以通过点击我放置按钮的屏幕来打开或关闭闪光灯,但按钮不可见。我检查了按钮的 Alpha,也尝试将子视图放在前面。什么都不管用。是否与 iOS 的 QR reader 有关? 下面是 QR Reader:
的实现 captureSession = AVCaptureSession()
guard let videoCaptureDevice = AVCaptureDevice.default(for: .video) else { return }
let videoInput: AVCaptureDeviceInput
do {
videoInput = try AVCaptureDeviceInput(device: videoCaptureDevice)
} catch {
return
}
if (captureSession.canAddInput(videoInput)) {
captureSession.addInput(videoInput)
} else {
failed()
return
}
let metadataOutput = AVCaptureMetadataOutput()
if (captureSession.canAddOutput(metadataOutput)) {
captureSession.addOutput(metadataOutput)
metadataOutput.setMetadataObjectsDelegate(self, queue: DispatchQueue.main)
metadataOutput.metadataObjectTypes = [.qr]
} else {
failed()
return
}
previewLayer = AVCaptureVideoPreviewLayer(session: captureSession)
previewLayer.frame = scanView.layer.bounds
previewLayer.videoGravity = .resizeAspectFill
scanView.layer.addSublayer(previewLayer)
captureSession.startRunning()
正如您在上面看到的那样,为了清晰起见,我也添加了背景颜色和背景图像。根据我的说法,按钮在层次结构中看起来很好。 在这个 scanView 上,我从我的 xib 文件中添加按钮
首先,它可能与 QR Reader 实现无关。
其次,问问自己按钮应该如何显示?标题?图片?
第三,您可以随时在 运行 应用程序时按 'Debug View Hierarchy' 按钮,以停止其执行并查看屏幕上显示的所有视图。
'Debug View Hierarchy' 按钮位于放置其他调试工具(如断点)下方的同一“调试工具”窗格中。
了解如何使用 Debug View Hierarchy
,这样您就可以清楚地看到按钮在屏幕上的位置以及它不可见的原因。
我认为您的按钮图像有问题,因为您可以单击按钮但看不到它,请确保图像已正确添加到按钮上。
记住一件事,如果它是可点击的,那么它就在那里,关注它的呈现。还尝试为其添加背景颜色并删除图像,以确保您的其他实现正常工作。
我设法通过设置按钮的 zposition 解决了这个问题。谢谢大家的宝贵时间