Skip to content

Instantly share code, notes, and snippets.

@kevinkirkup
Created November 24, 2015 12:18
Show Gist options
  • Save kevinkirkup/018834b7e591217f67bf to your computer and use it in GitHub Desktop.
Save kevinkirkup/018834b7e591217f67bf to your computer and use it in GitHub Desktop.
How to adjust layouts based on Autolayout Size Classes
#!/usr/bin/swift
# Take from Apple Sample Code
# https://developer.apple.com/library/prerelease/ios/samplecode/AdaptivePhotos/Listings/AdaptiveCode_AdaptiveCode_OverlayView_swift.html
class SomeView: UIView {
override func intrinsicContentSize() -> CGSize {
var size = label.intrinsicContentSize()
// Add a horizontal margin whose size depends on our horizontal size class.
if traitCollection.horizontalSizeClass == .Compact {
size.width += 8.0
}
else {
size.width += 40.0
}
// Add a vertical margin whose size depends on our vertical size class.
if traitCollection.verticalSizeClass == .Compact {
size.height += 8.0
}
else {
size.height += 40.0
}
return size
}
override func traitCollectionDidChange(previousTraitCollection: UITraitCollection?) {
super.traitCollectionDidChange(previousTraitCollection)
guard traitCollection.verticalSizeClass != previousTraitCollection?.verticalSizeClass ||
traitCollection.horizontalSizeClass != previousTraitCollection?.horizontalSizeClass else { return }
/*
If our size class has changed, then our intrinsic content size will
need to be updated.
*/
invalidateIntrinsicContentSize()
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment