iOS 自定义后退按钮 - 删除文本并使用自定义图像
Posted
技术标签:
【中文标题】iOS 自定义后退按钮 - 删除文本并使用自定义图像【英文标题】:iOS custom back button - remove text and use custom image 【发布时间】:2013-01-28 10:45:01 【问题描述】:我正在尝试在我的应用中实现自定义后退按钮。我不想要一个“后退”的头衔或任何前一个 VC 的头衔。相反,我希望它看起来像所有 VC 的附加图像。
我尝试在 UIBarButtonItem 的外观代理上使用 setBackButtonBackgroundImage 来替换图像,但它仍然显示“后退”标签,我不知道如何摆脱它。
是否有人对实施此操作的最佳实践有任何建议?我需要某种 UINavigationController 子类吗?还是我仍然需要使用我过去见过的人们使用的自定义返回方法路由(似乎很hacky)去setLeftBarButtonItem?任何帮助将不胜感激。
【问题讨论】:
如何设置后退按钮项的customView
?
看到这个***.com/questions/8221581/…
【参考方案1】:
尝试将 UIButton 作为一个子视图放在 leftBarButtonItem 中,并带有一个动作和你想要的图像,一切都会好起来的 :) (你可能需要稍微编辑它们,但这不应该是火箭科学 :P)
【讨论】:
谢谢,正如我在问题中所说,这是我最后的选择。我认为使用更新的 ios 5/6 API 可能会有更好的路线。如果几天之内没有任何问题,我会将您的回答作为最佳选择并接受。【参考方案2】:在我的许多项目中,我使用了一个自定义后退按钮,它只是一个没有文字的图标。我做了一些实验以找到最好的方法并提出了以下方法(我并不是说它是最好的方法或唯一的方法,但它对我有用并且稳定)。
我的想法是实现一个 Root ViewController 来重新设置标准后退按钮的样式。事实证明这根本不容易。在摆弄了大约 1 天的不同选项后,我终于找到了一个可行的解决方案。
诀窍是要有一个足够大的透明背景(比实际的背面 V 形更大,否则它会被调整为更小的尺寸),然后为 V 形使用自定义图像。
它有效,但正如您在下面的测量结果中看到的那样,它有一个小缺点:左侧有 14 个额外的间隙。如果您想在右侧匹配按钮,则需要将其补偿 14 个点(是的,它的点在视网膜上是 28 个像素...)
这是我的代码:
//this vc implements a custom back button, you can make this a root controller
//from which you inherit all your view controllers. But for simplicity reasons for this explanation
//I skipped this
class VCRoot: UIViewController
override func viewDidLoad()
//call supers
super.viewDidLoad()
//create custom back item
let backItem = UIBarButtonItem()
//as image set the back chevron icon its a 22x22 points (so 44x44 in retina)
backItem.image=PaintCode.imageOfBarBtnBack
let b = PaintCode.imageOfBarBtnBackgroundEmpty
//as background I use a 1 = 33 points (so 2x66 retina) fully transparant image
backItem.setBackButtonBackgroundImage(b, forState: UIControlState.Normal, barMetrics: UIBarMetrics.Default)
//set the newly created barbuttonitme as the back button
navigationItem.backBarButtonItem=backItem
//this vc puts a "forwards" button in the navbar on the right with a matching arrow
//The image of this matching forward arrow is the correct size (width!) so that its the same
//distance from the edge of the screen as the back button
class VC2: UIViewController
//outlet to the barbutton item from IB
@IBOutlet weak var barbtn: UIBarButtonItem!
override func viewDidLoad()
//call supers
super.viewDidLoad()
//the forward chevron in the image is shifted 14 points (so 28 retina) to the left
//so it has same distance from edge => its (22+14) x 22 = 36 x 22 points (72 x 44 retina)
barbtn.image=PaintCode.imageOfBarBtnForward
你也可以在这里参考我的博客: http://www.hixfield.net/blog/2015/05/adding-a-custom-back-button-the-standard-way/
【讨论】:
以上是关于iOS 自定义后退按钮 - 删除文本并使用自定义图像的主要内容,如果未能解决你的问题,请参考以下文章