UITextField添加右侧图标时UIImage未按UIImageView尺寸缩放问题
问题原因
你仅为UIImageView设置了frame,但UITextField布局rightView时不会直接使用子视图的frame,会按照自身的布局规则调整rightView的尺寸,最终导致imageView被放大,图片也随之超出预期大小。
修复方案
方案1:为UIImageView添加固定宽高约束
优先推荐该方案,符合AutoLayout布局规则,适配性更强:
@IBInspectable var rightImage: UIImage? { didSet { guard let image = rightImage else { rightView = nil rightViewMode = .never return } rightViewMode = .always let imageView = UIImageView() imageView.translatesAutoresizingMaskIntoConstraints = false imageView.image = image imageView.contentMode = .scaleAspectFit // 明确指定imageView的宽高 NSLayoutConstraint.activate([ imageView.widthAnchor.constraint(equalToConstant: 20), imageView.heightAnchor.constraint(equalToConstant: 20) ]) rightView = imageView } }
方案2:用容器视图包裹UIImageView
如果需要给图标加左右边距可以用这个方案:
@IBInspectable var rightImage: UIImage? { didSet { guard let image = rightImage else { rightView = nil rightViewMode = .never return } rightViewMode = .always // 容器视图直接设置frame作为rightView的尺寸 let containerView = UIView(frame: CGRect(x: 0, y: 0, width: 30, height: 20)) // 图标在容器内的位置,左侧留10边距 let imageView = UIImageView(frame: CGRect(x: 10, y: 0, width: 20, height: 20)) imageView.image = image imageView.contentMode = .scaleAspectFit containerView.addSubview(imageView) rightView = containerView } }
方案3:重写rightView尺寸方法(可选)
如果上述方案仍不生效,可以自定义UITextField子类,重写rightView布局方法强制固定尺寸:
override func rightViewRect(forBounds bounds: CGRect) -> CGRect { // 可自行调整位置和尺寸 return CGRect(x: bounds.width - 30, y: (bounds.height - 20) / 2, width: 20, height: 20) }
内容的提问来源于stack exchange,提问作者Cyril The Dev
相关产品推荐
相关产品推荐

