Có cách nào để xóa đường viền dưới cùng mà iOS7 tự động hiển thị dưới thanh điều hướng không?Xóa đường viền dưới của Thanh Điều hướng iOS7
Trả lời
Nếu tôi hiểu bạn một cách chính xác thử
[[UINavigationBar appearance] setShadowImage:[[UIImage alloc] init]];
dựa trên câu trả lời muffed2k + lập trình Thomas nhận xét, đây là những gì tôi đang sử dụng để hiển thị UINavigationBar mà không hình nền (iOS5.1/6.0) và không có biên giới phía dưới (ios7.0):
if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 6)
{
[[UINavigationBar appearance] setShadowImage:[[UIImage alloc] init]];
[[UINavigationBar appearance] setBackgroundImage:[[UIImage alloc] init] forBarMetrics:UIBarMetricsDefault];
}else
{
[[UINavigationBar appearance] setBackgroundImage:[[UIImage alloc] init] forBarMetrics:UIBarMetricsDefault];
}
Đó không hoạt động trên iOS7 với navigation mờ hay không ...
Một dán từ documenta của Apple sự;
Mô tả Hình ảnh bóng được sử dụng cho thanh điều hướng. Giá trị mặc định bằng 0, tương ứng với hình ảnh bóng mặc định. Khi không phải là số không, thuộc tính này đại diện cho một hình ảnh bóng tùy chỉnh để hiển thị thay vì mặc định. Để hiển thị hình ảnh bóng tùy chỉnh, hình nền tùy chỉnh cũng phải được đặt bằng phương thức setBackgroundImage: forBarMetrics:. Nếu hình nền mặc định được sử dụng, thì hình ảnh bóng mặc định sẽ được sử dụng bất kể giá trị của thuộc tính này.
Vì vậy, về cơ bản bạn cần triển khai setBackgroundImage đó. Lưu ý bổ sung, trên iOS7 bạn sẽ không sử dụng giao diện nữa nhưng bạn sẽ sửa đổi thanh Điều hướng trong ngữ cảnh viewController nơi bạn hiện đang ở.
Đó là:
[self.navigationController.navigationBar setShadowImage:[[UIImage alloc] init]];
[self.navigationController.navigationBar setBackgroundImage:[[UIImage alloc]init] forBarMetrics:UIBarMetricsDefault];
Trong trường hợp của tôi, tôi đặt điều này trong viewDidLoad (hành vi tùy chỉnh có thể được thêm vào cho mỗi UIViewController trong UINavigationViewController).
Cảm ơn bạn đã trả lời cập nhật và liên kết đến tài liệu. – JVillella
Trong trường hợp của tôi, đó là câu trả lời hoạt động, không phải câu trả lời đầu tiên. Cảm ơn bạn đã viết mã và tài liệu. –
Sử dụng giao diện vẫn có vẻ hoạt động tốt trên 7+, nhưng bạn sẽ cần phải đặt cả 'shadowImage' và' backgroundShadowImage' – bloudermilk
Nếu bạn đang nhắm mục tiêu iOS 7 và không thiết lập một hình nền thì điều này sẽ làm việc:
CGFloat navigationBarWidth = self.navigationController.navigationBar.frame.size.width;
CGFloat navigationBarHeight = self.navigationController.navigationBar.frame.size.height;
CGFloat statusBarHeight = [UIApplication sharedApplication].statusBarFrame.size.height;
UIGraphicsBeginImageContextWithOptions(CGSizeMake(navigationBarWidth, navigationBarHeight + statusBarHeight), NO, 0.0);
UIImage *blank = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
[[UINavigationBar appearance] setBackgroundImage:blank forBarMetrics:UIBarMetricsDefault];
//the following line takes away the border but only works if a background image is set (above)
[[UINavigationBar appearance] setShadowImage:[[UIImage alloc] init]];
tôi đã có ý tưởng từ câu trả lời @ muffe2k và this SO post.
Mọi phản hồi về phiếu bầu xuống? – kraftydevil
Nếu bạn đang sử dụng Swift và bạn gặp câu hỏi này, hãy thử này trong ViewController chính của bạn:
override func viewDidLoad() {
super.viewDidLoad()
/// ...
navigationController?.navigationBar.shadowImage = UIImage();
navigationController?.navigationBar.setBackgroundImage(UIImage(), forBarMetrics: .Default)
//...
}
Dựa trên câu trả lời @ wolffan của trên
Tôi biết có một câu trả lời chấp nhận này nhưng một cách khác để làm điều đó là thiết lập clipToBounds thành true.
Đây là một dòng mã để làm điều đó trong nhanh chóng
self.navigationController?.navigationBar.clipsToBounds = true
Làm việc đối với tôi như một say mê.
nó có thể phá vỡ nền thanh trạng thái, tâm trí bạn –
@ user5209290 là chính xác. Thanh trạng thái của tôi không còn được pha trộn với thanh điều hướng khi cắt bớt các giới hạn của thanh điều hướng. – Daniel
Đối với tôi follwing làm việc trên iOS 7 đến 9 + khi translucent
được thiết lập để false
UINavigationBar.appearance().transluscent = false
UINavigationBar.appearance().shadowImage = UIImage()
UINavigationBar.appearance().setBackgroundImage(UIImage(), forBarMetrics:.Default)
Tôi nghĩ rằng bạn đang thiếu một khoảng thời gian cho. – noobular
cho mục tiêu c
self.navigationController.navigationBar.clipsToBounds = YES;
trình như một say mê: Swift 3.x phiên bản
navigationController?.navigationBar.shadowImage = UIImage()
navigationController?.navigationBar.setBackgroundImage(UIImage(), for: .default)
Có! Cảm ơn bạn. – Gnamm
Có thể đáng chú ý là (như của iOS 7) để làm việc này bạn cũng phải làm [[UINavigationBar xuất hiện] setBackgroundImage: [[UIImage alloc] init] forBarMetrics: UIBarMetricsDefault]. –
Nó không hoạt động trên iOS 7. Tôi đã đặt thuộc tính mờ của thanh điều hướng thành sai. Có thể đó là một vấn đề? –