endertan / etnavbartransparent Goto Github PK
View Code? Open in Web Editor NEWChange NavigationBar's transparency at pop gestrue and other situation
License: MIT License
Change NavigationBar's transparency at pop gestrue and other situation
License: MIT License
急需要OC版的,不知是否有这个打算?
主要是还有一个_UIBarBackground
是白色的
我加上了一些代码就可以了
self.navigationController?.navigationBar.backgroundColor = UIColor.clear
self.navigationController?.navigationBar.setBackgroundImage(UIImage(), for: .default)
self.navigationController?.navigationBar.shadowImage = UIImage()
self.navigationController?.navigationBar.isTranslucent = true
self.navBarBgAlpha = 0
self.navBarTintColor = UIColor.clear
因为使用了私有接口,是否会造成无法上架?
present 一个带导航栏的ViewController
navBarBgAlpha = 0;
没有生效
xcode 9 ,pod 引入代码,主项目编译swift4,真机调试 系统ios10.3.2,iphone6plus,swizz的方法好像走了,但是手势还是没有反应。希望作者能看一下,谢谢。
Hello,
Since I added ETNavbarTransparent
my UIImagePickerController
doesn't work (UIImagePickerControllerDelegate
function are never performed). There is any chance of this issue came from the UINavigationControllerDelegate
extension used in ETNavbarTransparent
(which are also used for UIImagePickerController) ?
Thank you
可以通过滑动改变导航栏的背景色吗
作者你好,使用了ETNavBarTransparent确实很方便,也很好用,但是最近跑iOS12设备的时候,初始化导航控制器时UINavigationController(rootViewController:ViewController()),报空数组越界错误 “[__NSArray0 objectAtIndex:]: index 0 beyond bounds for empty NSArray”。麻烦您抽时间维护一下,谢谢。
I have a problem, the method above invoke always before the viewControllers system methods ,like "viewWillAppear", so when I pop to the controller with gesture , always the controller navBar didn't transparent? If I set the navBarAlpha = 0 in the "viewDidAppear", that work. So can you help me?
由于老版本的backdropview会有系统添加两个子view覆盖effectview
`if navigationBar.isTranslucent {
if #available(iOS 10.0, *) {
if let backgroundEffectView = valueForKey("_backgroundEffectView") as? UIView, navigationBar.backgroundImage(for: .default) == nil {
backgroundEffectView.alpha = alpha
return
}
} else {
if let adaptiveBackdrop = valueForKey("_adaptiveBackdrop") as? UIView , let backdropEffectView = adaptiveBackdrop.value(forKey: "_backdropEffectView") as? UIView {
adaptiveBackdrop.alpha = alpha //新
backdropEffectView.alpha = alpha //旧
return
}
}
}
barBackgroundView.alpha = alpha
}`
当 navigationBar alpha 为0的时候,naviagtionBar 下面有事件有操作时,会被拦截掉
Method 'initialize()' defines Objective-C class method 'initialize', which is not guaranteed to be invoked by Swift and will be disallowed in future versions
In Swift 3.1, Xcode 8.3.2
Maybe this will help you.
I'd like to fade the title label along with the background. I found one way of doing it for iOS 13+. I tried simply finding the label view and setting the alpha but as soon as the title updates the label is fully visible again.
if #available(iOS 13.0, *) {
if let color = navigationBar.scrollEdgeAppearance?.titleTextAttributes [NSAttributedString.Key.foregroundColor] as? UIColor {
navigationBar.scrollEdgeAppearance?.titleTextAttributes [NSAttributedString.Key.foregroundColor] = color.withAlphaComponent(alpha)
}
if let color = navigationBar.standardAppearance.titleTextAttributes [NSAttributedString.Key.foregroundColor] as? UIColor {
navigationBar.standardAppearance.titleTextAttributes [NSAttributedString.Key.foregroundColor] = color.withAlphaComponent(alpha)
}
if let color = navigationBar.compactAppearance?.titleTextAttributes [NSAttributedString.Key.foregroundColor] as? UIColor {
navigationBar.compactAppearance?.titleTextAttributes [NSAttributedString.Key.foregroundColor] = color.withAlphaComponent(alpha)
}
}
let originalMethod = class_getInstanceMethod(self, selector)
let swizzledMethod = class_getInstanceMethod(self, Selector(str))
method_exchangeImplementations(originalMethod, swizzledMethod)
这句话有错误。
当有present的动作之后,push会有几率导致宕机,卡住,进入后台再回到前台,push中会有黑屏
iOS 12,iOS 13
导航栏设置:
interactivePopGestureRecognizer?.delegate = nil
navigationBar.barTintColor = UIColor.bg
navigationBar.tintColor = UIColor.f
navigationBar.titleTextAttributes =
[NSAttributedString.Key.font: UIFont.m17 ?? UIFont.systemFont(ofSize: 17, weight: UIFont.Weight.medium),
NSAttributedString.Key.foregroundColor: UIColor.f]
let navigaiotnBar = UINavigationBar.appearance()
let backImg = UIImage(named: "navigationbar_back_withtext_1")
navigaiotnBar.backIndicatorImage = backImg
navigaiotnBar.backIndicatorTransitionMaskImage = backImg
有几率:
iOS 12.3
在 app 启动时设置
UINavigationBar.appearance().barTintColor = color
UINavigationBar.appearance().tintColor = color
UINavigationBar.appearance().titleTextAttributes = ...
UINavigationBar.appearance().isTranslucent = false //不使用半透明
ViewController中设置
self.navBarBgAlpha = 0
self.navBarTintColor = .white
导航栏并没有变透明
If translucent is false, app will crash.
version : 1.1.0
IOS11导航栏的黑线不能隐藏,但滚动的时候却可以
在程序启动后,为了方便控制全部导航栏的颜色,隐藏返回文字,使用自定义返回图标等。
全局设置了navBar (即 UINavigationBar.appearance())
然而这会导致页面第一次进入可以隐藏导航栏,但是再次进入的时候导航栏就会出现了(虽然在viewWillAppear中调用的影藏代码)
全局导航栏代码配置如下:
let navBar = UINavigationBar.appearance() let navBarColor = UIColor(hex: "232233") //和背景灰黑色一致 // navBar.backgroundColor = navBarColor //navBar.barTintColor = navBarColor
在测试中发现,再次进入页面的时候 在执行完viewWillAppear 后 打印的导航栏的backgroudView的透明度为 0 , 但是在viewDidAppear中再次打印时发现透明度已经被自动置为了 1 ,
首先膜拜下大佬,因为项目的需要,所以在大佬的基础上扩展了下标题样式,可能还有bug 文件
正常在viewdidload设置透明度 = 0. navBarTintColor = .white. push过去导航栏是黑屏状态,. 无其他view. 单纯的控制器没有添加任何视图
navigationController?.navigationBar.setBackgroundImage(UIImage.init(named: "mine_bg_top"), for: .default)
可以不用那个私有API,直接监听手势
http://www.jianshu.com/p/dd2137c63b3e
get {
let alpha = objc_getAssociatedObject(self, &AssociatedKeys.navBarBgAlpha) as? CGFloat
if alpha == nil {
return 1.0
}else{
return alpha!
}
let alpha1 = objc_getAssociatedObject(self, &AssociatedKeys.navBarBgAlpha) //在这里会报错 Extra argument in call (在下面那个也会这样)
}
set {
var alpha = newValue
if alpha > 1 {
alpha = 1
}
if alpha < 0 {
alpha = 0
}
objc_setAssociatedObject(self, &AssociatedKeys.navBarBgAlpha, alpha, .OBJC_ASSOCIATION_RETAIN_NONATOMIC) //在这里会报错 Extra argument in call (在下面那个也会这样)
我拖到我另一个项目中不会发生这个问题 但是在这个项目会报这种错
if A present to B
I hide B's navigaionBar,than I can see A's navigationBar,it is strange
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.