UIToolBar is used to display multiple UIBarButtonItems on UINavihgationBar.The code below worked correctly in apps before iOS12.This code is executed with viewDidLoad. // note
UIBarButtonItem *noteButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem: UIBarButtonSystemItemCompose target:self action:@selector(noteViewAction)];
// camera
UIBarButtonItem *cameraButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem: UIBarButtonSystemItemCamera target:self action:@selector(cameraViewAction)];
cameraButton.tintColor = [UIColor colorWithRed:19/255.0 green:144/255.0 blue:255/255.0 alpha:1.0];
// spacer
UIBarButtonItem *space = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:nil action:nil];
space.width = 50.0;
// Toolbar
UIToolbar *toolbar = [[UIToolbar alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 300.0f, 44.0f)];
toolbar.autoresizingMask = UIViewAutoresizingFlexibleHeight;
toolbar.items = [NSArray arrayWithObjects:space, noteButton, space, cameraButton, nil];
toolbar.backgroundColor = [UIColor clearColor];
[self.navigationItem setTitleView:toolbar];When running on Xcode11 beta and iOS13.0 beta 8 and iOS13.1 beta, UIBarButtonItem is displayed for the first time, but when you return to the original screen by displaying the next screen, or when using UIAlertController, The UIBarButtonItem is deleted.When UIBarButtonItem was deleted, the following message was displayed in the console log.UINavigationItemBugOnIos13[219:2900] [LayoutConstraints] Unable to simultaneously satisfy constraints.
Probably at least one of the constraints in the following list is one you don't want.
Try this:
(1) look at each constraint and try to figure out which you don't expect;
(2) find the code that added the unwanted constraint or constraints and fix it.
(Note: If you're seeing NSAutoresizingMaskLayoutConstraints that you don't understand, refer to the documentation for the UIView property translatesAutoresizingMaskIntoConstraints)
(
"",
"",
"",
"",
"",
"<nslayoutconstraint:0x28019d180 'ib_leading_leading'="" h:|-(16)-[_uimodernbarbutton:0x1028326d0] ="" (active,="" names:="" '|':_uibuttonbarbutton:0x1028324f0="" )="">",
"<nslayoutconstraint:0x28019dc20 'ib_leading_leading'="" h:|-(="">=10)-[_UIModernBarButton:0x102833fe0] (active, names: '|':_UIButtonBarButton:0x102833e00 )>",
"<nslayoutconstraint:0x28019d1d0 'ib_trailing_trailing'="" h:[_uimodernbarbutton:0x1028326d0]-(="">=11.5)-| (active, names: '|':_UIButtonBarButton:0x1028324f0 )>",
"<nslayoutconstraint:0x28019dc70 'ib_trailing_trailing'="" h:[_uimodernbarbutton:0x102833fe0]-(16)-| ="" (active,="" names:="" '|':_uibuttonbarbutton:0x102833e00="" )="">",
"<nslayoutconstraint:0x28019e580 'uisv-canvas-connection'="" uilayoutguide:0x281bbb8e0'uiviewlayoutmarginsguide'.leading="=" uiview:0x102922550.leading ="" (active)="">",
"<nslayoutconstraint:0x28019e620 'uisv-canvas-connection'="" uilayoutguide:0x281bbb8e0'uiviewlayoutmarginsguide'.trailing="=" uiview:0x102922830.trailing ="" (active)="">",
"<nslayoutconstraint:0x28019e9e0 'uisv-spacing'="" h:[uiview:0x102922550]-(0)-[_uibuttonbarbutton:0x1028324f0] ="" (active)="">",
"<nslayoutconstraint:0x28019e940 'uisv-spacing'="" h:[_uibuttonbarbutton:0x1028324f0]-(0)-[uiview:0x1029226c0] ="" (active)="">",
"<nslayoutconstraint:0x28019e990 'uisv-spacing'="" h:[uiview:0x1029226c0]-(0)-[_uibuttonbarbutton:0x102833e00] ="" (active)="">",
"<nslayoutconstraint:0x28019e8f0 'uisv-spacing'="" h:[_uibuttonbarbutton:0x102833e00]-(0)-[uiview:0x102922830] ="" (active)="">",
"<nslayoutconstraint:0x28019a7b0 'uiview-leftmargin-guide-constraint'="" h:|-(0)-[uilayoutguide:0x281bbb8e0'uiviewlayoutmarginsguide'](ltr) ="" (active,="" names:="" '|':_uibuttonbarstackview:0x1028284b0="" )="">",
"<nslayoutconstraint:0x28019a850 'uiview-rightmargin-guide-constraint'="" h:[uilayoutguide:0x281bbb8e0'uiviewlayoutmarginsguide']-(0)-|(ltr) ="" (active,="" names:="" '|':_uibuttonbarstackview:0x1028284b0="" )="">"
)
Will attempt to recover by breaking constraint
Make a symbolic breakpoint at UIViewAlertForUnsatisfiableConstraints to catch this in the debugger.
The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in may also be helpful.This is a likely bug for IOS13, so we have filed a bug report (FB6940927).Currently, the latest beta version of iOS13 is iOS13.1 beta, but if iOS13 beta8 is shipped as GM version of iOS13.0, this bug will remain included.To make matters worse, this also affects apps built for iOS12 that are being developed with Xcode10.In other words, among the apps currently distributed on the App Store, this bug appears when an app that has UIToolbar set to UINavigationBar is run under iOS13.If this bug has been resolved in the iOS13 GM version, you don't need to worry about this, but if the bug is included, you need to consider a workaround.This is a ridiculous workaround, but instead of running with viewDidLoad, run it with viewWillAppear and redraw the NavigationBarItem when using UIAlertController or returning to the original screen.Are there other good workarounds?