Add workaround for bug in iOS 11.1 beta around hit area of custom back buttons.

// FREEBIE
pull/1/head
Matthew Chen 8 years ago
parent 12aa31192c
commit 0ccddb696a

@ -1106,27 +1106,29 @@ typedef NS_ENUM(NSInteger, MessagesRangeSizeMode) {
- (void)createBackButton - (void)createBackButton
{ {
UIBarButtonItem *backItem = [self createOWSBackButton]; UIBarButtonItem *backItem = [self createOWSBackButton];
// This method gets called multiple times, so it's important we re-layout the unread badge if (backItem.customView) {
// with respect to the new backItem. // This method gets called multiple times, so it's important we re-layout the unread badge
[backItem.customView addSubview:_backButtonUnreadCountView]; // with respect to the new backItem.
// TODO: The back button assets are assymetrical. There are strong reasons [backItem.customView addSubview:_backButtonUnreadCountView];
// to use spacing in the assets to manipulate the size and positioning of // TODO: The back button assets are assymetrical. There are strong reasons
// bar button items, but it means we'll probably need separate RTL and LTR // to use spacing in the assets to manipulate the size and positioning of
// flavors of these assets. // bar button items, but it means we'll probably need separate RTL and LTR
[_backButtonUnreadCountView autoPinEdgeToSuperviewEdge:ALEdgeTop withInset:-6]; // flavors of these assets.
[_backButtonUnreadCountView autoPinLeadingToSuperviewWithMargin:1]; [_backButtonUnreadCountView autoPinEdgeToSuperviewEdge:ALEdgeTop withInset:-6];
[_backButtonUnreadCountView autoSetDimension:ALDimensionHeight toSize:self.unreadCountViewDiameter]; [_backButtonUnreadCountView autoPinLeadingToSuperviewWithMargin:1];
// We set a min width, but we will also pin to our subview label, so we can grow to accommodate multiple digits. [_backButtonUnreadCountView autoSetDimension:ALDimensionHeight toSize:self.unreadCountViewDiameter];
[_backButtonUnreadCountView autoSetDimension:ALDimensionWidth // We set a min width, but we will also pin to our subview label, so we can grow to accommodate multiple digits.
toSize:self.unreadCountViewDiameter [_backButtonUnreadCountView autoSetDimension:ALDimensionWidth
relation:NSLayoutRelationGreaterThanOrEqual]; toSize:self.unreadCountViewDiameter
relation:NSLayoutRelationGreaterThanOrEqual];
[_backButtonUnreadCountView addSubview:_backButtonUnreadCountLabel];
[_backButtonUnreadCountLabel autoPinWidthToSuperviewWithMargin:4]; [_backButtonUnreadCountView addSubview:_backButtonUnreadCountLabel];
[_backButtonUnreadCountLabel autoPinHeightToSuperview]; [_backButtonUnreadCountLabel autoPinWidthToSuperviewWithMargin:4];
[_backButtonUnreadCountLabel autoPinHeightToSuperview];
// Initialize newly created unread count badge to accurately reflect the current unread count.
[self updateBackButtonUnreadCount]; // Initialize newly created unread count badge to accurately reflect the current unread count.
[self updateBackButtonUnreadCount];
}
self.navigationItem.leftBarButtonItem = backItem; self.navigationItem.leftBarButtonItem = backItem;
} }

@ -53,6 +53,22 @@ NS_ASSUME_NONNULL_BEGIN
= CGRectMake(0, 0, backImage.size.width + kExtraRightPadding, backImage.size.height + kExtraHeightPadding); = CGRectMake(0, 0, backImage.size.width + kExtraRightPadding, backImage.size.height + kExtraHeightPadding);
backButton.frame = buttonFrame; backButton.frame = buttonFrame;
if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(11, 1)) {
// In iOS 11.1 beta, the hot area of custom bar button items is _only_
// the bounds of the custom view, making them very hard to hit.
//
// TODO: Remove this hack if the bug is fixed in iOS 11.1 by the time
// it goes to production (or in a later release),
// since it has two negative side effects: 1) the layout of the
// back button isn't consistent with the iOS default back buttons
// 2) we can't add the unread count badge to the back button
// with this hack.
return [[UIBarButtonItem alloc] initWithImage:backImage
style:UIBarButtonItemStylePlain
target:target
action:selector];
}
UIBarButtonItem *backItem = [[UIBarButtonItem alloc] initWithCustomView:backButton]; UIBarButtonItem *backItem = [[UIBarButtonItem alloc] initWithCustomView:backButton];
backItem.width = buttonFrame.size.width; backItem.width = buttonFrame.size.width;

Loading…
Cancel
Save