I have an app that does all UI programmatically without using auto layout or any sort of constraints. At the bottom of the screen is a UIToolbar. I am trying to lay this out to play well with the iPhone X screen's bottom safe area but due to the design of the VCs I cannot use layout constraints.
So in my layoutSubviews callback I am doing this:
if (@available(iOS 11.0, *)) {
toolbarHeight += UIApplication.sharedApplication.keyWindow.safeAreaInsets.bottom;
}
Then later setting the UIToolbar's frame directly with toolBarHeight.
This works in that the toolbar is now the correct height and adjusts when you rotate to landscape, but the problem is that the Toolbar's buttons are not top aligned, but rather centered vertically. I can't figure out how to set the contentInsets or some way to top align the UIToolbar buttons without using constraints.
Any ideas?
You obtain the safe area for a view by applying the insets in this property to the view's bounds rectangle. If the view is not currently installed in a view hierarchy, or is not yet visible onscreen, the edge insets in this property are 0 .
Select View Controller -> File Inspector (first tab) -> Use safe area layout guides (uncheck the checkbox). You can also change it programmatically in viewDidLoad(). Hope this Helps! Have you tried giving constraint through storyboard rather than programmatically?
To use the new safe area, select Safe Area Layout Guides in the File inspector for the view controller, and then add constraints between your content and the new safe area anchors. This prevents your content from being obscured by top and bottom bars, and by the overscan region on tvOS.
UIToolbar
will automatically fill the safe area. Keep the toolbar height as you would have (eg 49pts), and position it so that the bottom of the toolbar is at the top of the bottom safe area guide.
self.toolbar.width = self.view.width
self.toolbar.height = 49.0
self.toolbar.bottom = self.view.height - self.view.safeAreaInsets.bottom
The above code is using UIView+FrameAdjustments
.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With