我认为这种情况的原因已经在这些回答中得到了解释:
https://dev59.com/kU_Ta4cB1Zd3GeqPCZ5A#3476424
https://dev59.com/kU_Ta4cB1Zd3GeqPCZ5A#6528603
。UIBarButtonItem的行为取决于您在何处以编程方式附加它们。如果将它们附加到工具栏,则它们将变成白色的“浮雕”图标。如果将它们附加到导航栏,则不会出现这种情况。我花了几个小时编写一个函数,将工具栏UIBarButtonItem的样式应用于UIImages。
它是用MonoTouch的C#编写的,但我相信您可以轻松地将其调整为Obj-C...
UIImage ApplyToolbarButtonStyling(UIImage oldImage)
{
float shadowOffset = 1f;
float shadowOpacity = .54f;
RectangleF imageRect = new RectangleF(PointF.Empty, oldImage.Size);
RectangleF shadowRect = new RectangleF(new PointF(0, shadowOffset), oldImage.Size);
RectangleF newRect = RectangleF.Union(imageRect, shadowRect);
UIGraphics.BeginImageContextWithOptions(newRect.Size, false, oldImage.CurrentScale);
CGContext ctxt = UIGraphics.GetCurrentContext();
ctxt.ScaleCTM(1f, -1f);
ctxt.TranslateCTM(0, -newRect.Size.Height);
ctxt.SaveState();
ctxt.ClipToMask(shadowRect, oldImage.CGImage);
ctxt.SetFillColor(UIColor.FromWhiteAlpha(0f, shadowOpacity).CGColor);
ctxt.FillRect(shadowRect);
ctxt.RestoreState();
ctxt.ClipToMask(imageRect, oldImage.CGImage);
ctxt.SetFillColor(UIColor.FromWhiteAlpha(1f, 1f).CGColor);
ctxt.FillRect(imageRect);
UIImage newImage = UIGraphics.GetImageFromCurrentImageContext();
UIGraphics.EndImageContext();
return newImage;
}
因此,一个原本长这样的UIBarButtonItem:
现在可以使用上述函数创建成这个样子:
UIBarButtonItem barButtonItem = new UIBarButtonItem(ApplyToolbarButtonStyling(UIImage.FromFile("MusicIcon.png")), UIBarButtonItemStyle.Plain, delegate {})
现在的样子应该是这样:
希望这能帮助未来的某个人。