iOS different constraints for different devices iOS different constraints for different devices xcode xcode

iOS different constraints for different devices


Easy way!

To overcome this issue I created a small library so you don't have to write a single line of code just assign the class (NSLayoutHelper) to your constraint and you'll be able to update your constraint for all the devices differently.

enter image description here

For updating constraints

enter image description here

Output

enter image description here


we were facing similar issue. We solved with helper class called scaled. Which basically just multiply size of something, which should appear larger on larger device.

extension CGFloat {    public var scaled: CGFloat {        switch UIDevice.type.getResolutionGroup()! {        case .lr320x568:            return self        case .lr375x667:            return self * 1.1        case .lr414x736:            return self * 1.2        case .lr768x1024:            return self * 1.3        // For iPads        case .lr1024x1366:            return self * 1.3        }    }}

And implementation of resolution group

public func getResolutionGroup() -> ResolutionGroup? {        switch self {        case .iPhone5, .iPhone5C, .iPhone5S, .iPhoneSE, .iPodTouch5, .iPodTouch6:            return .lr320x568        case .iPhone6, .iPhone6S, .iPhone7:            return .lr375x667        case .iPhone6Plus, .iPhone6SPlus, .iPhone7Plus:            return .lr414x736        case .iPadMini, .iPadMini2, .iPadMini3, .iPadMini4:            return .lr768x1024        case .iPad2, .iPad3, .iPad4, .iPadAir, .iPadAir2:            return .lr768x1024        case .iPadPro:            return .lr1024x1366        case .simulator:            return isiPhone() ? .lr320x568 : .lr768x1024        default:            return .lr320x568        }    }

And usage in app

fileprivate let footerHeight = CGFloat(180).scaled


Not using Interface Builder, no. Constraints, can only target Compact, Regular or Any sizes and all iPhone models have Compact width and Regular height when in portrait mode.

If you want that kind of granularity, you have to do it with code instead.