safeAreaInsets for UIToolbar without using Constraints

Viewed 1831

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?

1 Answers

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.

Related