简体   繁体   English

为什么我的imageView在Swift的UIScreen上没有居中?

[英]Why is my imageView not centered on UIScreen in Swift?

I have the following code:我有以下代码:

private func setupImageViews() {
    
    let width = UIScreen.main.bounds.width * 0.5
    let x = (UIScreen.main.bounds.width * 0.5) - width/2
    let y = UIScreen.main.bounds.width * 0.191
    
    focusImageView = UIImageView(frame: CGRect(x: x, y: y, width: width, height: width))
    focusImageView.image = UIImage(named: "scan_qr_focus")
    addSubview(focusImageView)

    qrCodeImageView = UIImageView()
    qrCodeImageView.contentMode = .scaleAspectFill
    addSubview(qrCodeImageView)
}

I want to display a viewfinder for the camera in the centerX of the screen.我想在屏幕的 centerX 中显示相机的取景器。 I don't know why, but on my physical iPhone 13 mini it works perfect, but on my physical iPad Air the viewfinder is out of center, like showing in the images below.我不知道为什么,但在我的实体 iPhone 13 mini 上它工作完美,但在我的实体 iPad Air 上,取景器不在中心,如下图所示。

Does someone know why this is happening?有人知道为什么会这样吗?

Is there any solution for this?有什么解决办法吗?

Thanks!谢谢!

all perfect on physical iPhone在实体 iPhone 上一切完美

not good on physical iPad身体不好 iPad

I think constraints would be a good way of solving this issue rather than laying out views via their frame.我认为约束是解决这个问题的好方法,而不是通过框架来布置视图。

Something like this should be a great start, if not the whole solution.像这样的事情应该是一个很好的开始,如果不是整个解决方案的话。 As we only have part of your code, a few assumptions have been made in this answer.由于我们只有您的部分代码,因此在此答案中做出了一些假设。 Feel free to tweak the constraints as needed.根据需要随意调整约束。

let focusImageView = UIImageView(named: "scan_qr_focus")

private func setupImageViews() {
    focusImageView.translatesAutoresizingMaskIntoConstraints = false
    addSubview(focusImageView)

    qrCodeImageView = UIImageView()
    qrCodeImageView.contentMode = .scaleAspectFill
    addSubview(qrCodeImageView)
}

private func setConstraints() {
    let yourYOffset = 100

    NSLayoutConstraints.activate([
        focusImageView.topAnchor.constraint(equalTo: topAnchor, constant: yourYOffset),
        focusImageView.centerXAnchor.constraint(equalTo: centerXAnchor),
        focusImageView.widthAnchor.constraint(equalTo: widthAnchor, multiplier: 0.5),
        focusImageView.heightAnchor.constraint(equalTo: widthAnchor)
    ])
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM