thanh điều hướng trong suốt ios


121

Tôi đang tạo một ứng dụng và tôi đã duyệt trên internet và tôi đang tự hỏi làm thế nào họ tạo ra điều hướng minh bạch này Thanh như thế này:

nhập mô tả hình ảnh ở đây

Tôi đã thêm những thứ sau như trong appdelegate của mình:

UINavigationBar.appearance().translucent = true

nhưng điều này chỉ làm cho nó trông giống như sau:

nhập mô tả hình ảnh ở đây

Làm cách nào tôi có thể làm cho thanh điều hướng trong suốt như hình ảnh đầu tiên


Với mã mà tôi không biết, nhưng nếu bạn giỏi CSS, bạn có thể sử dụng một khuôn khổ (Pixate: freestyle.org ) và chỉ có thể áp dụng một kiểu CSS cho thanh điều hướng của bạn :)!
Nicolas Charvoz

Câu trả lời:


286

Bạn có thể áp dụng Hình ảnh Thanh Điều hướng như bên dưới cho Mờ.

Mục tiêu-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) //UIImage.init(named: "transparent.png")
self.navigationController?.navigationBar.shadowImage = UIImage()
self.navigationController?.navigationBar.isTranslucent = true
self.navigationController?.view.backgroundColor = .clear

Hi vọng nó sẽ giúp ích cho bạn ..!


4
khi tôi setBackgroundImage nó loại bỏ barTintColor?
Peter Pik

Bạn có thể lấy hình ảnh của thanh điều hướng..theo nhu cầu của bạn..và áp dụng cho thanh điều hướng như trên .. (Hình ảnh bạn muốn áp dụng cho thanh điều hướng)
Vidhyanand

1
thiết lập các backgroundColor của navigationController là không cần thiết
mờ bezark

4
Với giải pháp này, tôi nhận được một thanh điều hướng màu đen, có ý kiến ​​gì không?
Carlos del Blanco

1
Không như mong đợi. Khi bạn làm điều đó, bạn sẽ không có bức tường mờ như với alpha 0,7 phải, CỘNG cũng bao phủ thanh trạng thái. Nếu bạn làm điều này trên iOS 13, bạn sẽ chỉ có một hình chữ nhật khá đẹp mắt và trên đó là THANH TÌNH TRẠNG THANH TINH KHIẾT. mà tác giả của câu hỏi rõ ràng và cụ thể của nó.
Marlhex

122

Giải pháp Swift

Đây là cách tốt nhất mà tôi đã tìm thấy. Bạn chỉ có thể dán nó vào phương thức của 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
}

source: Làm trong suốt thanh điều hướng liên quan đến hình ảnh bên dưới trong iOS 8.1


4
Giải pháp Swift 3 của bạn chỉ làm cho thanh của tôi trở nên trắng trơn.
Jose Ramirez

@JozemiteApps thử tạo một dự án Xcode hoàn toàn mới và dán mã vào. Chỉ mất 3 phút để xác nhận xem đó là mã của tôi ở trên hay điều gì đó về dự án của bạn đang gây ra điều này.
Dan Beaulieu

2
Tôi cũng có một navibar trắng đơn giản và không có navibar trong suốt
Kingalione

Điều này làm việc tuyệt vời, cảm ơn bạn! Bạn có biết làm thế nào bạn có thể triển khai nó sao cho thanh điều hướng duy nhất trên ViewControllers mong muốn là trong suốt không?
RufusV

@JoseRamirez Đó có thể là nền của viewController mà bạn thấy. Bạn cần thay đổi giới hạn trên cùng của chế độ xem đầu tiên để căn chỉnh với chế độ xem siêu tốc chứ không phải vùng an toàn hoặc lề.
turingtested

26

Swift 5 chỉ áp dụng cho bộ điều khiển chế độ xem hiện tại

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
}

13

Swift 3: phần mở rộng cho Thanh điều hướng trong suốt

extension UINavigationBar {
    func transparentNavigationBar() {
    self.setBackgroundImage(UIImage(), for: .default)
    self.shadowImage = UIImage()
    self.isTranslucent = true
    }
}

12

Giải pháp Swift 4.2: Đối với nền trong suốt:

  1. Đối với phương pháp tiếp cận chung:

    override func viewDidLoad() {
        super.viewDidLoad()
    
        self.navigationController?.navigationBar.setBackgroundImage(UIImage(), for: UIBarMetrics.default)
        self.navigationController?.navigationBar.shadowImage = UIImage()
        self.navigationController?.navigationBar.isTranslucent = true
    
    }
  2. Đối với Đối tượng Cụ thể:

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

Hy vọng nó hữu ích.


Bạn tham khảo đối tượng nào navBar?
Sergey Gamayunov

@SergeyGamayunov navBarở đây, đề cập đến đối tượng của UINavigationBar.
Ümañg ßürmån

Đó là những gì ông có nghĩa là ... chúng ta hãy navbar = self.navigationController .navigationBar?
Marlhex

8

Tôi đã có thể thực hiện điều này nhanh chóng theo cách này:

let navBarAppearance = UINavigationBar.appearance()
let colorImage = UIImage.imageFromColor(UIColor.morselPink(), frame: CGRectMake(0, 0, 340, 64))
navBarAppearance.setBackgroundImage(colorImage, forBarMetrics: .Default)

nơi tôi đã tạo phương thức tiện ích sau trong một UIColordanh mục:

imageFromColor(color: UIColor, frame: CGRect) -> UIImage {
  UIGraphicsBeginImageContextWithOptions(frame.size, false, 0)
  color.setFill()
  UIRectFill(frame)
  let image = UIGraphicsGetImageFromCurrentImageContext()
  UIGraphicsEndImageContext()
  return image
}

Đây phải là câu trả lời hàng đầu!
Mihail Salari

7

Những gì nó đã làm việc cho tôi:

    let bar:UINavigationBar! =  self.navigationController?.navigationBar
    self.title = "Whatever..."
    bar.setBackgroundImage(UIImage(), forBarMetrics: UIBarMetrics.Default)
    bar.shadowImage = UIImage()
    bar.alpha = 0.0 

5

Đặt thuộc tính nền của Thanh điều hướng của bạn, ví dụ:

navigationController?.navigationBar.backgroundColor = UIColor(red: 1.0, green: 0.0, blue: 0.0, alpha: 0.5)

(Bạn có thể phải thay đổi điều đó một chút nếu bạn không có bộ điều khiển điều hướng, nhưng điều đó sẽ cung cấp cho bạn ý tưởng về việc phải làm.)

Đồng thời đảm bảo rằng chế độ xem bên dưới thực sự mở rộng dưới thanh.


Điều này cho phép tôi như sau: i.stack.imgur.com/GT3WV.png Làm thế nào tôi có thể làm đỏ một chút giống như các liên kết đầu tiên (ảnh) tôi đăng
Peter Pik

Bạn có thể chơi với giá trị alpha và thay đổi nó từ 0,5 thành bất kỳ giá trị nào trong khoảng từ 0,0 đến 1,0. Và như tôi đã nói, hãy đảm bảo rằng chế độ xem bên dưới nằm dưới thanh điều hướng, nếu không bạn sẽ không thấy bất kỳ nội dung nào chiếu qua thanh này. Nếu bạn đang sử dụng Trình tạo giao diện, bạn có thể kéo và căn chỉnh cạnh trên của chế độ xem đó với cạnh trên của màn hình.
Atomix

2

Hãy thử điều này, nó phù hợp với tôi nếu bạn cũng cần hỗ trợ ios7, nó dựa trên tính minh bạch của 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];

2

Đối với những người đang tìm kiếm giải pháp OBJC, sẽ được thêm vào trong phương thức didFinishLaunchingWithOptions của App Delegate:

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

1

Nếu bạn muốn có thể thực hiện việc này theo lập trình trong nhanh chóng 4 trong khi vẫn ở trên cùng một chế độ xem,

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
    }

Một điều quan trọng cần nhớ là nhấp vào nút này trong bảng phân cảnh của bạn. Tôi đã gặp sự cố với màn hình nhảy trong một thời gian dài. Hãy chắc chắn rằng bạn đặt điều này:nhập mô tả hình ảnh ở đây

Sau đó, khi bạn thay đổi độ trong suốt của thanh điều hướng, nó sẽ không làm cho các chế độ xem nhảy lên vì các chế độ xem mở rộng hết mức lên trên cùng, bất kể độ hiển thị của thanh điều hướng.


1

Thêm cái này vào tải của bạn

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

0

Phương thức tiện ích mà bạn gọi bằng cách chuyển navigationController và màu sắc mà bạn muốn đặt trên thanh điều hướng. Đối với trong suốt , bạn có thể sử dụng clearColorcácUIColor lớp.

Đối với mục tiêu 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];
}

Đối với 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
}

0

Tôi đã làm việc với vấn đề này và tôi gặp phải sự cố khi sử dụng các câu trả lời được cung cấp tại đây bởi những người dùng khác nhau. Vấn đề là một hộp màu trắng đằng sau hình ảnh trong suốt NavigationBar của tôi trên iOS 13+

nhập mô tả hình ảnh ở đây

Giải pháp của tôi là cái này

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

Hy vọng điều này sẽ giúp bất kỳ ai có cùng vấn đề

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.