【问题标题】:iOS - make UIImage take the same size as UIButtoniOS - 使 UIImage 与 UIButton 大小相同
【发布时间】:2016-07-26 09:06:13
【问题描述】:

我使用创建自定义栏按钮

+ (UIBarButtonItem *)barBtnItem:(id)target action:(SEL)action imageName:(NSString *)imageName frame:(CGRect)frame
{
    UIButton *btn =  [UIButton buttonWithType:UIButtonTypeCustom];
    [btn setImage:[UIImage imageNamed:imageName] forState:UIControlStateNormal];
    [btn addTarget:target action:action forControlEvents:UIControlEventTouchUpInside];
    [btn setFrame:frame];
    UIBarButtonItem *barBtn = [[UIBarButtonItem alloc] initWithCustomView:btn];
    return barBtn;
}

框架大小

CGRectMake(0, 0, 22, 22)

但是,我认为由于纵横比,我的图像变小了,但在 UIButton 中正确居中

但是,我希望图像的大小与 UIButton 的大小相同。

我可以这样做吗?

我使用了 XCode 7 并尝试了它的切片功能。但我无法让它工作。

如果我可以通过代码做到这一点?

我也查看了 UIEdgeinsets,但我并不完全理解 cap/insets 的概念。

【问题讨论】:

  • 两个答案都是正确的。然而,插图的值需要为负值才能扩展图像。 0 没有工作,因为它没有做任何事情。如果我将 insets 值设置为 -5,我会得到想要的行为。
  • 如果你不介意设置为背景图片,你可以试试这个github.com/AlexHsieh/ButtonAppearance

标签: ios objective-c uibutton uiimage


【解决方案1】:

设置按钮的内容模式为UIViewContentModeScaleToFill

btn.imageView.contentMode = UIViewContentModeScaleToFill
btn.imageView.frame = btn.bounds

【讨论】:

  • 我做了调整。
【解决方案2】:

在编写以下代码后检查:

btn.contentMode= UIViewContentModeScaleToFill;
btn.contentEdgeInsets = UIEdgeInsetsMake(0, 0, 0, 0);
btn.imageEdgeInsets = UIEdgeInsetsMake(0, 0, 0, 0);

仍然无法正常工作,然后尝试下面的代码行。设置UIButton 的背景图片而不是图片。

+ (UIBarButtonItem *)barBtnItem:(id)target action:(SEL)action imageName:(NSString *)imageName frame:(CGRect)frame
{

UIButton *btn =  [UIButton buttonWithType:UIButtonTypeCustom];
[btn setBackgroundImage:[UIImage imageNamed:imageName] forState:UIControlStateNormal];
[btn addTarget:target action:action forControlEvents:UIControlEventTouchUpInside];
[btn setFrame:frame];
UIBarButtonItem *barBtn = [[UIBarButtonItem alloc] initWithCustomView:btn];
return barBtn;
}

如果不起作用,请使用以下代码行:

 UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:imageName] style:UIBarButtonItemStylePlain target:self action:@selector(handleBack:)];

【讨论】:

  • 编辑了我的答案UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:imageName] style:UIBarButtonItemStylePlain target:self action:@selector(handleBack:)];。检查一下
  • 它确实伸展..但我发现其他问题。经过更多调查后,我将对此进行更新
【解决方案3】:

你可以通过 AutoLayouts 做到这一点!从顶部,底部,左侧,右侧设置图像约束等于按钮!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多