Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
透明导航栏ios_Ios_Iphone_Swift_Uinavigationbar - Fatal编程技术网

透明导航栏ios

透明导航栏ios,ios,iphone,swift,uinavigationbar,Ios,Iphone,Swift,Uinavigationbar,我正在创建一个应用程序,我在互联网上浏览过,我想知道他们是如何使这个透明的导航栏变成这样的: 我在appdelegate中添加了以下内容: UINavigationBar.appearance().translucent = true 但这只是让它看起来像以下内容: 如何使导航栏像第一个图像一样透明您可以将下面的导航栏图像应用为半透明 目标-C: [self.navigationController.navigationBar setBackgroundImage:[UIImage new

我正在创建一个应用程序,我在互联网上浏览过,我想知道他们是如何使这个透明的导航栏变成这样的:

我在appdelegate中添加了以下内容:

UINavigationBar.appearance().translucent = true
但这只是让它看起来像以下内容:


如何使导航栏像第一个图像一样透明

您可以将下面的导航栏图像应用为半透明

目标-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];
self.navigationController?.navigationBar.setBackgroundImage(UIImage(), for: .default) //UIImage.init(named: "transparent.png")
self.navigationController?.navigationBar.shadowImage = UIImage()
self.navigationController?.navigationBar.isTranslucent = true
self.navigationController?.view.backgroundColor = .clear
    
Swift 3:

[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];
self.navigationController?.navigationBar.setBackgroundImage(UIImage(), for: .default) //UIImage.init(named: "transparent.png")
self.navigationController?.navigationBar.shadowImage = UIImage()
self.navigationController?.navigationBar.isTranslucent = true
self.navigationController?.view.backgroundColor = .clear
    

设置导航栏的背景属性,例如

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];

我能够以这种方式迅速完成这一任务:

let navBarAppearance = UINavigationBar.appearance()
let colorImage = UIImage.imageFromColor(UIColor.morselPink(), frame: CGRectMake(0, 0, 340, 64))
navBarAppearance.setBackgroundImage(colorImage, forBarMetrics: .Default)
其中,我在
UIColor
类别中创建了以下实用程序方法:

imageFromColor(color: UIColor, frame: CGRect) -> UIImage {
  UIGraphicsBeginImageContextWithOptions(frame.size, false, 0)
  color.setFill()
  UIRectFill(frame)
  let image = UIGraphicsGetImageFromCurrentImageContext()
  UIGraphicsEndImageContext()
  return image
}
快速解决方案 这是我找到的最好的方法。您只需将其粘贴到appDelegate的
didFinishLaunchingWithOptions
方法:

Swift 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
}
来源:

它对我的作用:

    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
    }
}

通过传递navigationController和要在导航栏上设置的颜色来调用的实用程序方法。对于透明,您可以使用
UIColor
类的
clearColor

目标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
    }
但要记住的一件重要事情是在故事板中单击此按钮。很长一段时间以来,我一直对跳跃表演有意见。确保您设置了以下选项:


然后,当您更改导航栏的半透明性时,无论导航栏的可见性如何,当视图一直延伸到顶部时,都不会导致视图跳转。

Swift 4.2解决方案:对于透明背景:

  • 对于一般方法:

    override func viewDidLoad() {
        super.viewDidLoad()
    
        self.navigationController?.navigationBar.setBackgroundImage(UIImage(), for: UIBarMetrics.default)
        self.navigationController?.navigationBar.shadowImage = UIImage()
        self.navigationController?.navigationBar.isTranslucent = true
    
    }
    
  • 对于特定对象:

    override func viewDidLoad() {
        super.viewDidLoad()
    
        navBar.setBackgroundImage(UIImage(), for: UIBarMetrics.default)
        navBar.shadowImage = UIImage()
        navBar.navigationBar.isTranslucent = true
    
    }
    

  • 希望有用。

    对于那些正在寻找OBJC解决方案的人,可以在App Delegate didfishlaunchingwithoptions方法中添加:

    [[UINavigationBar appearance] setBackgroundImage:[UIImage new] forBarMetrics:UIBarMetricsDefault];
    [UINavigationBar appearance].shadowImage = [UIImage new];
    [UINavigationBar appearance].backgroundColor = [UIColor clearColor];
    [UINavigationBar appearance].translucent = YES;
    

    将此添加到您的加载中

    self.navigationController?.navigationBar.setBackgroundImage(UIImage(), for: .default)
    self.navigationController?.navigationBar.shadowImage = UIImage()
    self.navigationController?.navigationBar.backgroundColor = UIColor(red: 1, green: 1, blue: 1, alpha: 0.0)
    //adjust alpha according to your need 0 is transparent 1 is solid
    

    Swift 5仅适用于当前视图控制器

    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
    
        // Make the navigation bar background clear
        navigationController?.navigationBar.setBackgroundImage(UIImage(), for: .default)
        navigationController?.navigationBar.shadowImage = UIImage()
        navigationController?.navigationBar.isTranslucent = true
    }
    
    override func viewWillDisappear(_ animated: Bool) {
        super.viewWillDisappear(animated)
    
        // Restore the navigation bar to default
        navigationController?.navigationBar.setBackgroundImage(nil, for: .default)
        navigationController?.navigationBar.shadowImage = nil
    }
    

    我一直在研究这个问题,使用不同用户在这里提供的响应时遇到了一个问题。问题是iOS 13上导航栏透明图像后面有一个白色框+

    我的解决方案是这个

    if #available(iOS 13, *) {
        navBar?.standardAppearance.backgroundColor = UIColor.clear
        navBar?.standardAppearance.backgroundEffect = nil
        navBar?.standardAppearance.shadowImage = UIImage()
        navBar?.standardAppearance.shadowColor = .clear
        navBar?.standardAppearance.backgroundImage = UIImage()
    }
    
    更新

    感谢@TMin


    如果将tableView/CollectionView与此配合使用,则在滚动时会注意到出现1点阴影。添加navBar?.scrollEdgeAppearance=nil以获得此阴影

    希望这能帮助有同样问题的人写下以下两行:

     navigationController?.navigationBar.isTranslucent = true
     navigationController?.navigationBar.backgroundColor = .clear
    

    在iOS 13中为我工作

    这里没有一个答案完全适合我。这使导航栏完全透明-在iOS 14和iOS 11上测试(目标C):


    iOS 13.0+引入了UINavigationBarAppearance,因此,iOS 13.0+上会出现此问题。

    用这个来解决这个问题

    更改导航栏外观 使用UINavigationBarAppearance和UIBarbuttoneMappearance更改导航栏的外观。

    //将导航栏标题设置为红色文本

    if #available(iOS 13, *) {
            let appearance = UINavigationBarAppearance()
            appearance.configureWithOpaqueBackground()
            appearance.backgroundColor = UIColor.systemRed
            appearance.titleTextAttributes = [.foregroundColor: UIColor.lightText] // With a red background, make the title more readable.
            navigationItem.standardAppearance = appearance
            navigationItem.scrollEdgeAppearance = appearance
            navigationItem.compactAppearance = appearance // For iPhone small navigation bar in landscape.
        }
    


    对于代码我不知道,但是如果你擅长CSS,你可以使用一个框架(Pixate:),并且可以将CSS样式应用到你的导航栏:)!这给了我以下信息:我怎样才能像我发布的第一个链接(图像)那样使红色多一点?你可以使用alpha值并将其从0.5更改为0.0到1.0之间的任何值。正如我所说的,确保下面的视图位于导航栏下,否则你将看不到任何内容在导航栏中闪烁。如果您使用的是Interface Builder,则可以拖动该视图的上边缘并将其与屏幕的上边缘对齐。当我设置BackgroundImage时,它会删除barTintColor?设置navigationController的背景色不是必需的。使用此解决方案,我会得到一个黑色的navigationBar,有什么想法吗?不是预期的。当您这样做时,您将不会有像alpha为0.7的墙半透明,以及覆盖状态栏。如果你在iOS 13上这样做,你将只有一个好看的矩形,在它上面,状态栏非常清晰。这个问题的作者说得很清楚,也很具体。在xCode版本11.4中,让导航栏透明化的“解决办法”似乎已经停止工作了。它过去是有用的。。。是我还是其他人也经历过这种情况?您的Swift 3解决方案只会让我的工具栏变成白色。@JozemiteApps尝试创建一个全新的Xcode项目,并将代码粘贴到其中。应该只需要3分钟就可以确认是我上面的代码还是你的项目导致了这个问题。我还有一个纯白色的导航栏,没有透明的导航栏。这很好,谢谢!您知道如何实现它,使所需viewController上的导航栏是透明的吗?@JoseRamirez您看到的可能是viewController的背景。您需要更改第一个视图的顶部约束以与superview对齐,而不是与安全区域或边距对齐。您使用
    navBar
    指的是什么对象?@SergeyGamayunov
    navBar
    这里指的是UINavigationBar的对象。这就是他的意思。。。让navBar=self.navigationController?.NavigationBar这应该是最重要的答案!此答案是截至2021年2月28日的最新答案。如果您将tableView/CollectionView与此一起使用,则在滚动时会注意到出现一个1点阴影。添加
    navBar?.scrollEdgeAppearance=nil
    以了解此阴影。谢谢@TMin,我将用您的评论更新我的答案。谢谢你,克里斯。