Search code examples
iosswiftuitraitcollection

How to create UITraitCollection with both size classes in code?


I have a simple extension for UITraitCollection:

extension UITraitCollection {

    var isIpad: Bool {
        return horizontalSizeClass == .Regular && verticalSizeClass == .Regular
    }
}

Before, I have needed to write tests for this (using TDD):

let traitCollection = UITraitCollection(verticalSizeClass: .Regular) //the init is either for vertical or horizontal at time
traitCollection.horizontalSizeClass = .Regular //error

XCTAssertTrue(traitCollection.isIpad)

But the error is:

Cannot assign to property: horizontalSizeClass is a get only property.

What should I do then?


Solution

  • Ok, I have found solution:

    let compactTraitCollection = UITraitCollection(traitsFromCollections: [UITraitCollection(verticalSizeClass: .Compact), UITraitCollection(horizontalSizeClass: .Compact)])
    XCTAssertFalse(compactTraitCollection.isIpad)
    
    let regularTraitCollection = UITraitCollection(traitsFromCollections: [UITraitCollection(verticalSizeClass: .Regular), UITraitCollection(horizontalSizeClass: .Regular)])
    XCTAssertTrue(regularTraitCollection.isIpad)