Fix sizing issue in QRCodeView.

onstraints were set up in a way that would make QRCodeView try to set itself to 40 dp + whatever margins are provided at init.
This commit is contained in:
Igor Solomennikov 2026-05-08 21:25:34 -07:00 committed by GitHub
parent 69a368c11b
commit b02a60f63d
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -24,35 +24,69 @@ class QRCodeView: UIView {
super.init(frame: .zero)
// MARK: View properties
overrideUserInterfaceStyle = .light
backgroundColor = .Signal.background
directionalLayoutMargins = .init(margin: contentInset)
backgroundColor = .white
layoutMargins = UIEdgeInsets(margin: contentInset)
layer.cornerRadius = cornerRadius
layer.borderWidth = borderWidth
layer.borderColor = qrCodeTintColor.paddingBorder.cgColor
//
// Spinner
//
loadingSpinner.style = .large
loadingSpinner.color = Theme.lightThemePrimaryColor
loadingSpinner.color = .Signal.label
loadingSpinner.hidesWhenStopped = true
addSubview(loadingSpinner)
loadingSpinner.translatesAutoresizingMaskIntoConstraints = false
NSLayoutConstraint.activate([
loadingSpinner.widthAnchor.constraint(equalToConstant: 40),
loadingSpinner.heightAnchor.constraint(equalTo: widthAnchor),
// Make sure spinner is within QRCodeView's layout margins.
loadingSpinner.topAnchor.constraint(greaterThanOrEqualTo: layoutMarginsGuide.topAnchor),
loadingSpinner.centerYAnchor.constraint(equalTo: layoutMarginsGuide.centerYAnchor),
// Centers spinner in `QRCodeView`.
loadingSpinner.leadingAnchor.constraint(greaterThanOrEqualTo: layoutMarginsGuide.leadingAnchor),
loadingSpinner.centerXAnchor.constraint(equalTo: layoutMarginsGuide.centerXAnchor),
])
//
// QR Code image
//
// Don't antialias QR codes
qrCodeImageView.layer.magnificationFilter = .nearest
qrCodeImageView.layer.minificationFilter = .nearest
// MARK: Layout
addSubview(loadingSpinner)
loadingSpinner.autoSetDimensions(to: .square(40))
loadingSpinner.autoPinEdgesToSuperviewMargins()
addSubview(qrCodeImageView)
qrCodeImageView.autoPinEdgesToSuperviewMargins()
qrCodeImageView.contentMode = .scaleAspectFit
addSubview(qrCodeImageView)
qrCodeImageView.translatesAutoresizingMaskIntoConstraints = false
// Constrain image to QRCodeView's layout margins.
NSLayoutConstraint.activate([
qrCodeImageView.topAnchor.constraint(equalTo: layoutMarginsGuide.topAnchor),
qrCodeImageView.leadingAnchor.constraint(equalTo: layoutMarginsGuide.leadingAnchor),
qrCodeImageView.trailingAnchor.constraint(equalTo: layoutMarginsGuide.trailingAnchor),
qrCodeImageView.bottomAnchor.constraint(equalTo: layoutMarginsGuide.bottomAnchor),
])
//
// Error image
//
addSubview(errorImageView)
errorImageView.autoSetDimensions(to: .square(40))
errorImageView.autoCenterInSuperviewMargins()
errorImageView.translatesAutoresizingMaskIntoConstraints = false
NSLayoutConstraint.activate([
errorImageView.widthAnchor.constraint(equalToConstant: 40),
errorImageView.heightAnchor.constraint(equalTo: widthAnchor),
// Make sure `errorImageView` is within QRCodeView's layout margins.
errorImageView.topAnchor.constraint(greaterThanOrEqualTo: layoutMarginsGuide.topAnchor),
errorImageView.centerYAnchor.constraint(equalTo: layoutMarginsGuide.centerYAnchor),
// Centers `errorImageView` in `QRCodeView`.
errorImageView.leadingAnchor.constraint(greaterThanOrEqualTo: layoutMarginsGuide.leadingAnchor),
errorImageView.centerXAnchor.constraint(equalTo: layoutMarginsGuide.centerXAnchor),
])
setLoading()
}