我的Xcode产品是使用iPhone 11模板在Xcode 10上开发的,并且所有视图控制器都完全对齐。
为了使我的应用程序更加多样化,我需要更改按钮等的大小,但是当我将设备切换为使用iPhone 8或iPhone 4并更改约束条件并切换回iPhone 11时,查看的图像仍在约束,即使我使用了“可变特征”按钮。
我不知道是否还有其他方法可以执行此操作,但是我得到了设备屏幕,并为我更改了尺寸,这可以更改最大和最小屏幕,但是您可以为每个不同的分辨率创建一个尺寸列表
extension UIDevice {
var hasNotch: Bool {
if #available(iOS 11.0, *) {
let bottom = UIApplication.shared.keyWindow?.safeAreaInsets.bottom ?? 0
return bottom > 0
} else {
return false
}
}
public var iPhoneX: Bool {
return UIScreen.main.nativeBounds.height == 2436
}
public var iPhone: Bool {
return UIDevice.current.userInterfaceIdiom == .phone
}
public var smallScreen: Bool {
return screenType == .iPhones_5_5s_5c_SE || screenType == .iPhones_4_4S
}
public enum ScreenType: String {
case iPhones_4_4S = "iPhone 4 or iPhone 4S"
case iPhones_5_5s_5c_SE = "iPhone 5, iPhone 5s, iPhone 5c or iPhone SE"
case iPhones_6_6s_7_8 = "iPhone 6, iPhone 6S, iPhone 7 or iPhone 8"
case iPhones_6Plus_6sPlus_7Plus_8Plus = "iPhone 6 Plus, iPhone 6S Plus, iPhone 7 Plus or iPhone 8 Plus"
case iPhones_X_XS = "iPhone X or iPhone XS"
case iPhone_XR = "iPhone XR"
case iPhone_XSMax = "iPhone XS Max"
case unknown
}
public var screenType: ScreenType {
switch UIScreen.main.nativeBounds.height {
case 960:
return .iPhones_4_4S
case 1136:
return .iPhones_5_5s_5c_SE
case 1334:
return .iPhones_6_6s_7_8
case 1792:
return .iPhone_XR
case 1920, 2208:
return .iPhones_6Plus_6sPlus_7Plus_8Plus
case 2436:
return .iPhones_X_XS
case 2688:
return .iPhone_XSMax
default:
return .unknown
}
}
public var buttonsizeheight: Int {
switch UIScreen.main.nativeBounds.height {
case 960:
return 10
case 1136:
return 20
case 1334:
return 25
case 1792:
return 28
case 1920, 2208:
return 30
case 2436:
return 33
case 2688:
return 35
default:
return 20
}
}
}
好,您可以通过在班级使用以下代码来更改或设置约束,因此可以为iphone和ipad设置视图。
struct Device {
// iDevice detection code
static let IS_IPAD = UIDevice.current.userInterfaceIdiom == .pad
static let IS_IPHONE = UIDevice.current.userInterfaceIdiom == .phone
static let IS_RETINA = UIScreen.main.scale >= 2.0
static let SCREEN_WIDTH = Int(UIScreen.main.bounds.size.width)
static let SCREEN_HEIGHT = Int(UIScreen.main.bounds.size.height)
static let SCREEN_MAX_LENGTH = Int( max(SCREEN_WIDTH, SCREEN_HEIGHT) )
static let SCREEN_MIN_LENGTH = Int( min(SCREEN_WIDTH, SCREEN_HEIGHT) )
static let IS_IPHONE_4_OR_LESS = IS_IPHONE && SCREEN_MAX_LENGTH < 568
static let IS_IPHONE_5 = IS_IPHONE && SCREEN_MAX_LENGTH == 568
static let IS_IPHONE_6 = IS_IPHONE && SCREEN_MAX_LENGTH == 667
static let IS_IPHONE_6P = IS_IPHONE && SCREEN_MAX_LENGTH == 736
static let IS_IPHONE_X = IS_IPHONE && SCREEN_MAX_LENGTH == 812
}
现在您可以像这样设置约束:==
if(Device.IS_IPHONE_5 || Device.IS_IPHONE_4_OR_LESS){
//--- set your constrain for iphone 5 and 4
}else if(Device.IS_IPAD){
//--- set your constrain for ipad
}else{
//--- set default constrain
}