jan*_*sma 73 uibarbuttonitem ios swift
当我按下它时UIViewController,它在新的后退按钮中有一些标题UIViewController,如果标题有很多文本,它在iPhone 4s看起来不太好所以我想删除它.
如果我在prepareForSegue函数中添加一些代码,那将是一个麻烦.
有没有更好的方法实现这一目标
Nim*_*ekh 121
如果你想要后退箭头,那么将代码放入AppDelegate文件中的didFinishLaunchingWithOptions方法.
For Objective-C
[[UIBarButtonItem appearance] setBackButtonTitlePositionAdjustment:UIOffsetMake(0, -60) forBarMetrics:UIBarMetricsDefault];
Run Code Online (Sandbox Code Playgroud)
For Swift
let BarButtonItemAppearance = UIBarButtonItem.appearance()
BarButtonItemAppearance.setTitleTextAttributes([NSForegroundColorAttributeName: UIColor.clear], for: .normal)
Run Code Online (Sandbox Code Playgroud)
下面给出另一个选择.
在 Objective C
self.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"" style:UIBarButtonItemStylePlain target:nil action:nil];
Run Code Online (Sandbox Code Playgroud)
在 Swift
self.navigationItem.backBarButtonItem = UIBarButtonItem(title:"", style:.plain, target:nil, action:nil)
Run Code Online (Sandbox Code Playgroud)
更新:
let BarButtonItemAppearance = UIBarButtonItem.appearance()
let attributes: [NSAttributedStringKey: Any] = [
BarButtonItemAppearance.setTitleTextAttributes([NSForegroundColorAttributeName: UIColor.clear], for: .normal)
NSAttributedStringKey.font: UIFont.systemFont(ofSize: 0.1),
NSAttributedStringKey.foregroundColor: UIColor.clear]
BarButtonItemAppearance.setTitleTextAttributes(attributes, for: .normal)
BarButtonItemAppearance.setTitleTextAttributes(attributes, for: .highlighted)
Run Code Online (Sandbox Code Playgroud)
更新SWIFT 4.1:
let attributes = [NSAttributedStringKey.font: UIFont(name: "Helvetica-Bold", size: 0.1)!, NSAttributedStringKey.foregroundColor: UIColor.clear]
BarButtonItemAppearance.setTitleTextAttributes(attributes, for: .normal)
BarButtonItemAppearance.setTitleTextAttributes(attributes, for: .highlighted)
Run Code Online (Sandbox Code Playgroud)
使用偏移量
UIBarButtonItem.appearance().setBackButtonTitlePositionAdjustment(UIOffsetMake(-1000, 0), for:UIBarMetrics.default)
Run Code Online (Sandbox Code Playgroud)
所以可能你的问题已经解决了.
快乐的编码.
Mah*_*abu 61
工作就像Swift 3上的魅力一样
self.navigationController?.navigationBar.topItem?.title = " "
Run Code Online (Sandbox Code Playgroud)
Kar*_*kck 48
我在AppDelegate文件中使用这行代码didFinishLaunchingWithOptions来删除后退按钮title.
Swift 2.x
let barAppearace = UIBarButtonItem.appearance()
barAppearace.setBackButtonTitlePositionAdjustment(UIOffsetMake(0, -60), forBarMetrics:UIBarMetrics.Default)
Run Code Online (Sandbox Code Playgroud)
Swift 3.x
UIBarButtonItem.appearance().setBackButtonTitlePositionAdjustment(UIOffsetMake(0, -60), for:UIBarMetrics.default)
Run Code Online (Sandbox Code Playgroud)
Swift 4.x
UIBarButtonItem.appearance().setTitleTextAttributes([NSAttributedStringKey.foregroundColor: UIColor.clear], for: .normal)
UIBarButtonItem.appearance().setTitleTextAttributes([NSAttributedStringKey.foregroundColor: UIColor.clear], for: UIControlState.highlighted)
Run Code Online (Sandbox Code Playgroud)
Pra*_*ble 18
只需要从其他ViewControllers所依赖的父ViewController中进行操作.
override func viewWillDisappear(animated: Bool) {
super.viewWillDisappear(true)
navigationItem.backBarButtonItem = UIBarButtonItem(title: "", style: .Plain, target: nil, action: nil)}
Run Code Online (Sandbox Code Playgroud)
只需将代码复制到 didFinishLaunchingWithOptions launchOptions
UIBarButtonItem.appearance().setBackButtonTitlePositionAdjustment(UIOffset(horizontal: -1000.0, vertical: 0.0), for: .default)
Run Code Online (Sandbox Code Playgroud)
UIBarButtonItem.appearance().setBackButtonTitlePositionAdjustment(UIOffsetMake(-1000.0, 0.0), for: .default)
Run Code Online (Sandbox Code Playgroud)
您可以使用xcode 8和swift 3.0
self.navigationController?.navigationBar.backItem?.title = " "
Run Code Online (Sandbox Code Playgroud)
在 iOS 14 上,现在backButtonDisplayMode在UINavigationItem类中呈现该属性。因此,要删除后退按钮标题,您可以使用
navigationItem.backButtonDisplayMode = .minimal
Run Code Online (Sandbox Code Playgroud)
在viewDidLoad要删除它的 viewController的func 中。
要在所有导航栏中删除它,我使用了 swizzling 技术
import UIKit
private let swizzling: (UIViewController.Type, Selector, Selector) -> Void = { forClass, originalSelector, swizzledSelector in
if let originalMethod = class_getInstanceMethod(forClass, originalSelector), let swizzledMethod = class_getInstanceMethod(forClass, swizzledSelector) {
let didAddMethod = class_addMethod(forClass, originalSelector, method_getImplementation(swizzledMethod), method_getTypeEncoding(swizzledMethod))
if didAddMethod {
class_replaceMethod(forClass, swizzledSelector, method_getImplementation(originalMethod), method_getTypeEncoding(originalMethod))
} else {
method_exchangeImplementations(originalMethod, swizzledMethod)
}
}
}
extension UIViewController {
static func swizzle() {
let originalSelector1 = #selector(viewDidLoad)
let swizzledSelector1 = #selector(swizzled_viewDidLoad)
swizzling(UIViewController.self, originalSelector1, swizzledSelector1)
}
@objc open func swizzled_viewDidLoad() {
if let _ = navigationController {
if #available(iOS 14.0, *) {
navigationItem.backButtonDisplayMode = .minimal
} else {
// Fallback on earlier versions
navigationItem.backButtonTitle = ""
}
}
swizzled_viewDidLoad()
}
}
Run Code Online (Sandbox Code Playgroud)
并在application(_:didFinishLaunchingWithOptions:)通话中
UIViewController.swizzle()
Run Code Online (Sandbox Code Playgroud)
iOS13的方法。
let backButtonAppearance = UIBarButtonItemAppearance(style: .plain)
backButtonAppearance.normal.titleTextAttributes = [.foregroundColor: UIColor.clear]
let navigationBarAppearance = UINavigationBarAppearance()
navigationBarAppearance.backButtonAppearance = backButtonAppearance
UINavigationBar.appearance().standardAppearance = navigationBarAppearance
Run Code Online (Sandbox Code Playgroud)
let barAppearace = UIBarButtonItem.appearance()
barAppearace.setBackButtonTitlePositionAdjustment(UIOffsetMake(0, -60), for:UIBarMetrics.default)
Run Code Online (Sandbox Code Playgroud)
在swift 3.0中使用了这行代码
您可以为UIViewController您想要此行为的所有s 创建子类,并在子类中创建viewDidLoad:
override func viewDidLoad() {
super.viewDidLoad()
self.navigationItem.backBarButtonItem = UIBarButtonItem(
title: "", style: .plain, target: nil, action: nil)
}
Run Code Online (Sandbox Code Playgroud)
这样,您可以选择您希望行为的控制器,而无需重复代码.我更喜欢我的控制器只是说"后退",而不是前一个控制器的标题,所以我在这里设置了这个标题.
从获得灵感rordulu的答案在这里,我最终创建一个自定义的UINavigationController和UINavigation酒吧,似乎处理这个棘手的问题的所有情况.
1)UINavigationController使用您的自定义初始化UINavigationBar:
class CustomNavigationController: UINavigationController {
convenience init() {
self.init(navigationBarClass: CustomNavigationBar.self, toolbarClass: nil)
}
}
Run Code Online (Sandbox Code Playgroud)
2)backItem.title每次视图自行设置时,将导航栏的属性设置为空字符串
class CustomNavigationBar: UINavigationBar {
override func layoutSubviews() {
backItem?.title = ""
super.layoutSubviews()
}
}
Run Code Online (Sandbox Code Playgroud)
现在每次使用此导航控制器和条形组合时,它都不会有后退按钮文本!
注意:如果还使用故事板,这应该可以正常工作,只需确保将自定义导航栏组件放入视图中
| 归档时间: |
|
| 查看次数: |
77078 次 |
| 最近记录: |