Self adjustable Scroll View that proportionally reducing provided height constraints constants to fit all content on screen without scrolling. It takes into account ContentFitLayoutConstraint
's minimumHeight
value. If it's unable to fit content on screen without scrolling it'll just allow scrolling.
ContentFitScrollView
allows you to layout your content for high resolution screens and be sure that in case there isn't enough space on lower resolution screens content will be scrollable.
To run the example project, clone the repo, and run pod install
from the Example directory first.
About iPhone screens - https://www.paintcodeapp.com/news/ultimate-guide-to-iphone-resolutions
Let's assume designer did his job well and provided me 1242x2208 images. In my turn I did everything to match original. So 7 Plus images are ideal ones. Now let's compare how my interface will look like on other devices.
7 Plus | 6s | 5s |
---|---|---|
![]() |
![]() |
![]() |
No doubt it looks awful on every device except top ones (iPhone 6+, 6s+, 7+). My goal here was to fit everything on screen and with simple layout I failed. Of course I could use constraints to labels center and layout them acording to container view's center... But it's headache to calculate all those multipliers and expecially recalculate them when new designs arrive. Now try to imagine that layout won't be that simple... Ugh...
7 Plus | 6s | 5s |
---|---|---|
![]() |
![]() |
![]() |
This one much better! ContentFitScrollView
tries to reduce available space between labels to fit them all on screen. In case it can't screen will be scrollable so in worst case we fallback to how UIScrollView works.
7 Plus | 6s | 5s |
---|---|---|
![]() |
![]() |
![]() |
I'm using UILabel+Storyboard
extension from APExtensions/Storyboard to fit labels to screen size.
This one solution almost guarantee that my screen never will be scrollable and all elements will fit to screen. But for some layouts I still might preffer second one. It's up to you to decide which one fits better for your needs.
If you are setting ContentFitScrollView
class in storyboard assure module field is also ContentFitScrollView
Please check official guide
Cartfile:
github "APUtils/ContentFitScrollView"
ContentFitScrollView is available through CocoaPods. To install it, simply add the following line to your Podfile:
pod 'ContentFitScrollView'
Just set ContentFitScrollView
class to UIScrollView in storyboard (usually it's base container), assure module field is also ContentFitScrollView
:
and add constraints that you want to be resized in order to fit content for screen:
You can set ContentFitLayoutConstraint
class for those constraints in order to specify minimum height.
See example project for more details.
Any contribution is more than welcome! You can contribute through pull requests and issues on GitHub.
Anton Plebanovich, anton.plebanovich@gmail.com
ContentFitScrollView is available under the MIT license. See the LICENSE file for more info.