【问题标题】:iphone UIBarButtonItem : setBackgroundImage - Stretchediphone UIBarButtonItem:setBackgroundImage - 拉伸
【发布时间】:2016-09-10 02:11:09
【问题描述】:

我们使用情节提要添加了UIBarButtonItem,并且在运行时单击我们希望更改其图像(功能类似于添加书签/删除书签)。

研究了堆栈溢出。很多人建议在UIBarbuttonItem 中使用UIButton

下面的代码改变了图像,但它被拉伸了(甚至原始图像也显示为拉伸。

谁能指导我们仅使用UIBarButton(不使用UIButton)更改图像?

 [_barButtonAddToFav setBackgroundImage:[UIImage imageNamed:@"ic_add_to_fav.png"] forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];

【问题讨论】:

标签: ios uibarbuttonitem


【解决方案1】:

UIBarButtonItem 会将整个图像拉伸到它的条形按钮区域。

为了解决这个问题,在你的 UIBarButtonItem 中拖动一个 UIButton 并在 UIButton 上设置图像。

将 UIButton 类型设置为自定义,并将所有属性设置为 BarButton。

它不会被拉伸,您还可以设置与图像相同的宽度/高度分辨率。

希望它的帮助。如果我们必须采用其他解决方案,请告诉我。

【讨论】:

  • 谢谢 .. 采用这种方法!
  • 尝试了其他方法,因为我真的想以编程方式进行,但我在这里或其他地方找到的解决方案都不起作用。我不得不使用这种方法并设置UIButton的大小。
【解决方案2】:

我最近一直在努力解决这个问题,所有解决方案似乎都令人费解,但事实证明这是可行的(至少如果故事板上分配的原始图像与新图像大小相同 - 不确定它们是否不同):

barButton.image = (UIImage(named: "NewImage"))

【讨论】:

    【解决方案3】:

    不要对 UIBarButtonItem 使用 :setBackgroundImage,而是使用以下 Image 初始化语法对其进行初始化

    这将简单地创建带有图像的按钮,永远不会拉伸。

       self.navigationItem.hidesBackButton = true
       let backButton = UIBarButtonItem(image: UIImage(named: "ico-nav-prev"), style: .Plain, target: self, action: #selector(viewController.back(_:)))
       self.navigationItem.leftBarButtonItem = backButton
    

    【讨论】:

      【解决方案4】:

      你可以试试这个编码。无论如何它都会对你有所帮助。

      UIImage *buttonImg = [UIImage imageNamed:@"myImg.png"];
      UIImage *buttonGreyImg = [buttonImg stretchableImageWithLeftCapWidth:12 topCapHeight:0];
      [myButton setBackgroundImage:buttonGreyImg forState:UIControlStateNormal];
      

      【讨论】:

        【解决方案5】:

        还有你的问题的另一个代码(ANSWER)

         // Change the appearance of back button
             UIImage *backButtonImage = [[UIImage imageNamed:@"button_back"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 13, 0, 6)];
             [[UIBarButtonItem appearance] setBackButtonBackgroundImage:backButtonImage forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
        
         // Change the appearance of other navigation button
             UIImage *barButtonImage = [[UIImage imageNamed:@"button_normal"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 6, 0, 6)];
             [[UIBarButtonItem appearance] setBackgroundImage:barButtonImage forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
        

        【讨论】:

        • 谢谢@user3182143 .. 上面试过了,但仍然有图像一直在处理
        • 这两个答案你都试过了吗?
        • 是的,两个选项都试过了。仍然拉伸的图像。我选择了以下选项
        • 发生了什么?你通过下面的编码得到答案了吗?
        猜你喜欢
        • 2011-01-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-05-31
        • 1970-01-01
        • 2012-07-25
        • 1970-01-01
        相关资源
        最近更新 更多