美文网首页iOS 11IOS开发者学习笔记iOS项目实践中的学习
iOS--iOS11适配之navigationItem的大小问题

iOS--iOS11适配之navigationItem的大小问题

作者: 阿木马克 | 来源:发表于2017-09-05 15:35 被阅读135次

当有需求为在导航栏左右两边自定义按钮时,如果使用了以下做法,那么在iOS 11上就会出现问题:

-(void)initRightButton{
    UIImage *issueImage = [UIImage imageNamed:@"icon_collection_un"];
    _collectionButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    _collectionButton.frame = CGRectMake(0, 0, 20, 20);
    [_collectionButton setBackgroundImage:issueImage forState:UIControlStateNormal];
    _collectionButton.titleLabel.font = [UIFont systemFontOfSize:13];
    [_collectionButton addTarget:self action:@selector(changeCollectionState) forControlEvents:UIControlEventTouchUpInside];
    UIBarButtonItem *rightButtonItem = [[UIBarButtonItem alloc] initWithCustomView:_collectionButton];
    self.navigationItem.rightBarButtonItem = rightButtonItem;
    
}
iOS10运行截图 iOS11运行截图

解决办法:
给button设置约束而不是设置frame

UIImage *issueImage = [UIImage imageNamed:@"icon_collection_un"];
    _collectionButton = [UIButton buttonWithType:UIButtonTypeCustom];
    NSLayoutConstraint * widthConstraint = [NSLayoutConstraint constraintWithItem:_collectionButton
                                                                        attribute: NSLayoutAttributeWidth
                                                                        relatedBy: NSLayoutRelationEqual
                                                                           toItem: nil
                                                                        attribute: NSLayoutAttributeNotAnAttribute
                                                                       multiplier: 1
                                                                         constant: 20];
    NSLayoutConstraint * heightConstraint = [NSLayoutConstraint constraintWithItem:_collectionButton
                                                                         attribute: NSLayoutAttributeHeight
                                                                         relatedBy: NSLayoutRelationEqual
                                                                            toItem: nil
                                                                         attribute: NSLayoutAttributeNotAnAttribute
                                                                        multiplier: 1
                                                                          constant: 20];
    [_collectionButton addConstraint:widthConstraint];
    [_collectionButton addConstraint:heightConstraint];
    [_collectionButton setBackgroundImage:issueImage forState:UIControlStateNormal];
    [_collectionButton addTarget:self action:@selector(changeCollectionState) forControlEvents:UIControlEventTouchUpInside];
    UIBarButtonItem *rightButtonItem = [[UIBarButtonItem alloc] initWithCustomView:_collectionButton];
    self.navigationItem.rightBarButtonItem = rightButtonItem;
button设置约束

然后在iOS11上运行

优化后iOS11运行截图

👌👌👌

相关文章

网友评论

  • iOS白水:5s 上 点击区域会变小。你点击 边缘试试,看看有没有反应。然后 坐等解决方法。
    iOS白水:@超S神 我看到其他人 反馈 是 跟 Initwithcustomview有关系。with失效了。
    iOS白水:@阿木马克 跟约束没有关系的。你再试试。再5s 会有问题。 模拟器是没有问题的。
    阿木马克:你可以把约束宽高设置的大一点 我设置的是20宽高

本文标题:iOS--iOS11适配之navigationItem的大小问题

本文链接:https://www.haomeiwen.com/subject/jugujxtx.html