如何仅在iPhone 5S设备上隐藏UIImage组件?
针对iPhone 5S单独隐藏UIImage的解决方案
嗨,我懂你的困扰——靠尺寸类判断的话会误伤到iPhone 6这类设备,确实不太合适。这里有两个精准的方案,帮你只在iPhone 5S上隐藏目标图片:
方案1:通过屏幕高度判断(覆盖4英寸设备,含iPhone 5/5S/第一代SE)
如果你的需求其实是针对所有4英寸小屏iPhone(毕竟它们的布局适配情况一致),这个方法最通用,不需要硬编码设备型号:
override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) // 获取屏幕原生像素高度(忽略缩放) let nativeScreenHeight = UIScreen.main.nativeBounds.height // iPhone 5/5S/SE(初代)的原生高度都是1136 yourImageView.isHidden = nativeScreenHeight == 1136 }
为什么这个方法靠谱?
iPhone 5S的屏幕是4英寸,原生分辨率640×1136,对应的原生高度是1136像素。这个尺寸的设备只有iPhone 5、5S和第一代SE,不会误判其他机型。如果你的布局在这些小屏设备上都需要隐藏图片,这个方案最省心。
方案2:通过设备型号精确判断(仅针对iPhone 5S)
如果你确实要只针对iPhone 5S(排除iPhone 5和初代SE),可以通过获取设备的型号标识符来精确匹配:
首先,给UIDevice加个扩展,用来获取设备型号:
import UIKit extension UIDevice { var modelIdentifier: String { var systemInfo = utsname() uname(&systemInfo) let machineMirror = Mirror(reflecting: systemInfo.machine) let identifier = machineMirror.children.reduce("") { identifier, element in guard let value = element.value as? Int8, value != 0 else { return identifier } return identifier + String(UnicodeScalar(UInt8(value))) } return identifier } }
然后在视图控制器的生命周期方法里判断:
override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) let deviceModel = UIDevice.current.modelIdentifier // iPhone 5S的型号标识符是iPhone6,1(GSM版)和iPhone6,2(CDMA版) yourImageView.isHidden = deviceModel == "iPhone6,1" || deviceModel == "iPhone6,2" }
小提醒
- 这个方法是精准匹配iPhone 5S的,后续新出的小屏设备不会被误判。
- 如果你的APP支持设备旋转,建议把判断逻辑放到
traitCollectionDidChange(_:)方法里,确保旋转后图片的隐藏状态正确。
内容的提问来源于stack exchange,提问作者Brewski
相关产品推荐
相关产品推荐

