是否可以更改不同设备对Xcode的约束?

问题描述 投票:1回答:2

我的Xcode产品是使用iPhone 11模板在Xcode 10上开发的,并且所有视图控制器都完全对齐。

为了使我的应用程序更加多样化,我需要更改按钮等的大小,但是当我将设备切换为使用iPhone 8或iPhone 4并更改约束条件并切换回iPhone 11时,查看的图像仍在约束,即使我使用了“可变特征”按钮。

ios xcode
2个回答
0
投票

我不知道是否还有其他方法可以执行此操作,但是我得到了设备屏幕,并为我更改了尺寸,这可以更改最大和最小屏幕,但是您可以为每个不同的分辨率创建一个尺寸列表

   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
            }
        }
    }

0
投票

好,您可以通过在班级使用以下代码来更改或设置约束,因此可以为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
    }
© www.soinside.com 2019 - 2024. All rights reserved.