ContentFitScrollView
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.
Example
To run the example project, clone the repo, and run pod install
from the Example directory first.
Demonstration
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.
ContentFitScrollView
Without 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...
ContentFitScrollView
With 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.
ContentFitScrollView
+ APExtensions
With 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.
Installation
Carthage
If you are setting ContentFitScrollView
class in storyboard assure module field is also ContentFitScrollView
Please check official guide
Cartfile:
github "APUtils/ContentFitScrollView"
CocoaPods
ContentFitScrollView is available through CocoaPods. To install it, simply add the following line to your Podfile:
pod 'ContentFitScrollView'
Usage
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.
Contributions
Any contribution is more than welcome! You can contribute through pull requests and issues on GitHub.
Author
Anton Plebanovich, [email protected]
License
ContentFitScrollView is available under the MIT license. See the LICENSE file for more info.