прозрачная панель навигации ios
Я создаю приложение, и я просматривал в интернете, и мне интересно, как они делают эту прозрачную навигационную панель такой:

Я добавил следующее, как в моем appdelegate:
UINavigationBar.appearance().translucent = true
но это просто делает его выглядеть следующим образом:

Как я могу сделать панель навигации прозрачной, как первое изображение
9 ответов:
Вы можете применить изображение панели навигации, как показано ниже для полупрозрачного.
Цель-C:
[self.navigationController.navigationBar setBackgroundImage:[UIImage new] forBarMetrics:UIBarMetricsDefault]; //UIImageNamed:@"transparent.png" self.navigationController.navigationBar.shadowImage = [UIImage new];////UIImageNamed:@"transparent.png" self.navigationController.navigationBar.translucent = YES; self.navigationController.view.backgroundColor = [UIColor clearColor];Swift 3:
self.navigationController?.navigationBar.setBackgroundImage(UIImage(), for: .default) self.navigationController?.navigationBar.shadowImage = UIImage() self.navigationController?.navigationBar.isTranslucent = true self.navigationController?.view.backgroundColor = .clearнадеюсь, что это помогает вам..!
Быстрое Решение
Это лучший способ, который я нашел. Вы можете просто вставить его в свой appDelegate в
didFinishLaunchingWithOptionsспособ:Свифт 3 / 4
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { // Override point for customization after application launch. // Sets background to a blank/empty image UINavigationBar.appearance().setBackgroundImage(UIImage(), for: .default) // Sets shadow (line below the bar) to a blank image UINavigationBar.appearance().shadowImage = UIImage() // Sets the translucent background color UINavigationBar.appearance().backgroundColor = .clear // Set translucent. (Default value is already true, so this can be removed if desired.) UINavigationBar.appearance().isTranslucent = true return true }Swift 2.0
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { // Override point for customization after application launch. // Sets background to a blank/empty image UINavigationBar.appearance().setBackgroundImage(UIImage(), forBarMetrics: .Default) // Sets shadow (line below the bar) to a blank image UINavigationBar.appearance().shadowImage = UIImage() // Sets the translucent background color UINavigationBar.appearance().backgroundColor = UIColor(red: 0.0, green: 0.0, blue: 0.0, alpha: 0.0) // Set translucent. (Default value is already true, so this can be removed if desired.) UINavigationBar.appearance().translucent = true return true }источник: сделать панель навигации прозрачной относительно изображения ниже в iOS 8.1
я смог сделать это быстро таким образом:
let navBarAppearance = UINavigationBar.appearance() let colorImage = UIImage.imageFromColor(UIColor.morselPink(), frame: CGRectMake(0, 0, 340, 64)) navBarAppearance.setBackgroundImage(colorImage, forBarMetrics: .Default)где я создал следующий метод утилит в :
imageFromColor(color: UIColor, frame: CGRect) -> UIImage { UIGraphicsBeginImageContextWithOptions(frame.size, false, 0) color.setFill() UIRectFill(frame) let image = UIGraphicsGetImageFromCurrentImageContext() UIGraphicsEndImageContext() return image }
что это сработало для меня:
let bar:UINavigationBar! = self.navigationController?.navigationBar self.title = "Whatever..." bar.setBackgroundImage(UIImage(), forBarMetrics: UIBarMetrics.Default) bar.shadowImage = UIImage() bar.alpha = 0.0
Swift 3: расширение для прозрачной панели навигации
extension UINavigationBar { func transparentNavigationBar() { self.setBackgroundImage(UIImage(), for: .default) self.shadowImage = UIImage() self.isTranslucent = true } }
установите свойство background панели навигации, например
navigationController?.navigationBar.backgroundColor = UIColor(red: 1.0, green: 0.0, blue: 0.0, alpha: 0.5)(возможно, вам придется немного изменить это, если у вас нет навигационного контроллера, но это должно дать вам представление о том, что делать.)
также убедитесь, что ниже на самом деле простирается под бар.
попробуйте это, это работает для меня, если вам также нужно поддерживать ios7, он основан на прозрачности UItoolBar:
[self.navigationController.navigationBar setBackgroundImage:[UIImage new] forBarMetrics:UIBarMetricsDefault]; self.navigationController.navigationBar.shadowImage = [UIImage new]; self.navigationController.navigationBar.translucent = YES; self.navigationController.view.backgroundColor = [UIColor clearColor]; UIToolbar* blurredView = [[UIToolbar alloc] initWithFrame:self.navigationController.navigationBar.bounds]; [blurredView setBarStyle:UIBarStyleBlack]; [blurredView setBarTintColor:[UIColor redColor]]; [self.navigationController.navigationBar insertSubview:blurredView atIndex:0];
утилита метод, который вы вызываете, передавая navigationController и цвет, который вы хотите установить на панели навигации. Ибо прозрачный можно использовать
clearColorнаUIColorкласса.для цели c -
+ (void)setNavigationBarColor:(UINavigationController *)navigationController color:(UIColor*) color { [navigationController setNavigationBarHidden:false animated:false]; [navigationController.navigationBar setBackgroundImage:[UIImage new] forBarMetrics:UIBarMetricsDefault]; [navigationController.navigationBar setShadowImage:[UIImage new]]; [navigationController.navigationBar setTranslucent:true]; [navigationController.view setBackgroundColor:color]; [navigationController.navigationBar setBackgroundColor:color]; }Для Swift 3.0 -
class func setNavigationBarColor(navigationController : UINavigationController?, color : UIColor) { navigationController?.setNavigationBarHidden(false, animated: false) navigationController?.navigationBar .setBackgroundImage(UIImage(), forBarMetrics: UIBarMetrics.Default) navigationController?.navigationBar.shadowImage = UIImage() navigationController?.navigationBar.translucent = true navigationController?.view.backgroundColor = color navigationController?.navigationBar.backgroundColor = color }
Если вы хотите сделать это программно в swift 4, оставаясь на том же представлении,
if change { navigationController?.navigationBar.isTranslucent = false self.navigationController?.navigationBar.backgroundColor = UIColor(displayP3Red: 255/255, green: 206/255, blue: 24/255, alpha: 1) navigationController?.navigationBar.barTintColor = UIColor(displayP3Red: 255/255, green: 206/255, blue: 24/255, alpha: 1) } else { navigationController?.navigationBar.isTranslucent = true navigationController?.navigationBar.setBackgroundImage(backgroundImage, for: .default) navigationController?.navigationBar.backgroundColor = .clear navigationController?.navigationBar.barTintColor = .clear }одна важная вещь, чтобы помнить, хотя, чтобы нажать эту кнопку в раскадровке. У меня была проблема с прыжковым дисплеем в течение длительного времени. Убедитесь, что вы установили это:
затем, когда вы изменяете прозрачность панели навигации, это не приведет к тому, что представления будут прыгать, поскольку представления простираются до самого верха, независимо от видимость панели навигации.

Comments