【问题标题】:iOS 11 space between UIBarButtonItemiOS 11 UIBarButtonItem 之间的空间
【发布时间】:2017-09-29 08:26:06
【问题描述】:

我注意到 iOS 11 对 UIBarButtonItem 进行了一些更改。解决了 UIBarButtonItem 的图片尺寸问题后,我发现自己又遇到了一个更奇怪的问题。

我们有一个带有多个 UIBarButtonItems 的 UIToolBar,我们之前将 UIBarButtonItem 的宽度设置为 40,将 UIButton.image 的宽度设置为 24,这样每两个 UIBarButtonItems 之间就有一个很好的间距。但是,在 iOS 11 中,空间消失了。

我试过了

[self.deleteButton mas_makeConstraints:^(MASConstraintMaker *make) {
        make.size.mas_equalTo(CGSizeMake(40, 24));
    }];

NSLayoutConstraint *w = [self.deleteButton.imageView.widthAnchor constraintEqualToConstant:24];
NSLayoutConstraint *h = [self.deleteButton.imageView.widthAnchor constraintEqualToConstant:24];
w.active = YES;
h.active = YES;

但它并没有像我想象的那样工作。

我要么得到一个带有 CGSize(40, 24) 的拉伸图像列表,要么得到一个带有 CGSize(24, 24) 的 UIBarButtonItem 列表,在 UINavigationBar 中一一排列,没有间距。

我需要添加任何其他约束来创建间距吗?

【问题讨论】:

    标签: uinavigationbar frame uibarbuttonitem nslayoutconstraint ios11


    【解决方案1】:

    试试这个:

    UIButton*(^buttonWith)(NSString *) = ^(NSString *imageName) {
        CGFloat size = 40.0;
        UIButton *button = [[UIButton alloc] initWithFrame: CGRectMake(0.0, 0.0, size, size)];
        [button setImage: [[UIImage imageNamed: imageName] imageWithRenderingMode: UIImageRenderingModeAlwaysOriginal]  forState: UIControlStateNormal];
        [button addConstraint: [NSLayoutConstraint constraintWithItem: button attribute: NSLayoutAttributeWidth relatedBy: NSLayoutRelationEqual toItem: nil attribute: NSLayoutAttributeNotAnAttribute multiplier: 1.0 constant: size]];
        [button addConstraint: [NSLayoutConstraint constraintWithItem: button attribute: NSLayoutAttributeHeight relatedBy: NSLayoutRelationEqual toItem: nil attribute: NSLayoutAttributeNotAnAttribute multiplier: 1.0 constant: size]];
        return button;
    };
    

    用法:

    UIButton *resetButton = buttonWith(@"reset");
    self.resetBarButton = [[UIBarButtonItem alloc] initWithCustomView: resetButton];
    
    UIButton *backButton = buttonWith(@"back");
    self.backBarButton = [[UIBarButtonItem alloc] initWithCustomView: backButton];
    
    self.navigationItem.leftBarButtonItems = @[self.backBarButton, self.resetBarButton];
    

    【讨论】:

      【解决方案2】:

      在情节提要中,您可以在需要间距的按钮之间放置另一个 UIBarButtonItem。仅将文本设置为空格。查看屏幕截图。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-01-14
        • 2016-12-30
        • 2014-12-24
        • 1970-01-01
        • 1970-01-01
        • 2014-05-09
        • 1970-01-01
        相关资源
        最近更新 更多