调整 UIBarButtonItem 的 Imageview 的大小,以便缩小图像 (iOS)

Posted

技术标签:

【中文标题】调整 UIBarButtonItem 的 Imageview 的大小,以便缩小图像 (iOS)【英文标题】:Resizing UIBarButtonItem's Imageview so that the Image is Scaled Down (iOS) 【发布时间】:2014-04-21 04:06:08 【问题描述】:

我的 UIToolbar 中有一个按钮,我已为其分配了一个图像,但我希望图像自动按比例缩小(在应用程序外部调整图像大小会降低其质量)。

我尝试了解决方案here,它创建了一个自定义 imageView,然后将其分配给按钮。但是,图像似乎没有出现。这是我的代码:

UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"info.png"]];
    imageView.frame = CGRectMake(0, 0, 35, 35);
    imageView.contentMode = UIViewContentModeScaleAspectFit;
    imageView.userInteractionEnabled = YES;
    UIBarButtonItem *barButtonItem = [[UIBarButtonItem alloc] initWithCustomView:imageView];
    self.tutorial_lbl = barButtonItem;

请注意,如果我注释掉最后两行并改用下面的行,图像确实会出现,但随后会失去按钮的操作。

[self.tutorial_lbl setCustomView:imageView];

【问题讨论】:

【参考方案1】:

我假设添加自定义视图与使用 initWithCustomView: 创建条形按钮项时的作用相同。在这种情况下,文档说,

此方法创建的条形按钮项不调用动作 其目标响应用户交互的方法。相反, 条形按钮项期望指定的自定义视图来处理任何用户 互动并提供适当的回应。

所以,你应该在图像视图中添加一个点击手势识别器,并为其设置一个动作方法,

- (void)viewDidLoad 
    [super viewDidLoad];
    UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 35, 35)];
    imageView.image = [UIImage imageNamed:@"info.png"];
    UITapGestureRecognizer *tapper = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(barButtonTapped:)];
    [imageView addGestureRecognizer:tapper];
    imageView.userInteractionEnabled = YES;
    [self.tutorial_lbl setCustomView:imageView];


-(void)barButtonTapped:(UITapGestureRecognizer *) sender 
    NSLog(@"Tapped");

【讨论】:

谢谢,这太棒了!一个问题 - 是否有任何方法可以使按钮保留其“点击时突出显示”属性。这样做会将按钮变成静态图像(尽管该操作确实有效)。 @Kyle,我认为您也必须自己实现。您可以通过在两张不同的图像之间切换来做到这一点,其中一张比另一张更暗。 啊,有道理。我会试试看!【参考方案2】:

您可以尝试做的一件事是设置图像插图。 UIButtonUIBarButtonItem 都支持图像插入。您无需为此添加UIImageView。只需在按钮上设置图像,然后设置图像插图。

myButton.imageEdgeInsets = UIEdgeInsetsMake(TOP, LEFT, BOTTOM, RIGHT);//UIButton

myBarButtonItem.imageInsets = UIEdgeInsetsMake(TOP, LEFT, BOTTOM, RIGHT);//UIBarButtonItem

这会调整按钮上的图像大小。正值会缩小图片,负值会放大图片。

【讨论】:

我试过这个,但无法让左右值起作用。虽然我可以调整顶部和底部值的大小,但无论我使用什么值,左右都会保持拉伸。 没有。当我使用它时,它似乎适用于 ios 6.x,但 @rdelmar 的解决方案似乎最优雅(和实用)。【参考方案3】:

我能够通过执行以下操作来实现这一点:

let originalImage = UIImage(named: "SearchIcon")
let scaledIcon = UIImage(CGImage: originalImage!.CGImage!, scale: 5, orientation: originalImage!.imageOrientation)
let rightButton = UIBarButtonItem(image: scaledIcon, style: .Plain, target: self, action: #selector(MeViewController.showSearchUsers))

【讨论】:

以上是关于调整 UIBarButtonItem 的 Imageview 的大小,以便缩小图像 (iOS)的主要内容,如果未能解决你的问题,请参考以下文章

调整 UIBarButtonItem 的 Imageview 的大小,以便缩小图像 (iOS)

更改 UIBarButtonItem 的宽度 [重复]

UIBarButtonItem 代码不起作用

iOS 11 中的 UIBarButtonItem 间距问题

调整 UITextField 的宽度以横向填充工具栏

Compose UIBarButtonItem 在进入视图时会稍微改变位置