iOS完全透明navigationBarおよび透明を隠した黒い線
2149 ワード
ページが透明なNavigationBarを実現するには、次の方法を使用します.
tableViewなどの始点を一番上に設定
次はnavigationBar透明後黒線の問題です
もっと簡単に
[self.navigationController.navigationBar setBackgroundImage:[UIImage new] forBarMetrics:UIBarMetricsCompact];
tableViewなどの始点を一番上に設定
self.automaticallyAdjustsScrollViewInsets = NO;
次はnavigationBar透明後黒線の問題です
@interface MyViewController () {
UIImageView *navBarHairlineImageView;
}
@end
@implementation MyViewController
- (void)viewDidLoad {
[super viewDidLoad];
[self.navigationController.navigationBar setBackgroundImage:[UIImage new] forBarMetrics:UIBarMetricsCompact];
navBarHairlineImageView = [self findHairlineImageViewUnder:self.navigationController.navigationBar];
self.automaticallyAdjustsScrollViewInsets = NO;
}
- (UIImageView *)findHairlineImageViewUnder:(UIView *)view {
if ([view isKindOfClass:UIImageView.class] && view.bounds.size.height <= 1.0) {
return (UIImageView *)view;
}
for (UIView *subview in view.subviews) {
UIImageView *imageView = [self findHairlineImageViewUnder:subview];
if (imageView) {
return imageView;
}
}
return nil;
}
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
navBarHairlineImageView.hidden = YES;
}
- (void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
navBarHairlineImageView.hidden = NO;
}
もっと簡単に
if ([self.navigationController.navigationBar respondsToSelector:@selector( setBackgroundImage:forBarMetrics:)]){
NSArray *list = self.navigationController.navigationBar.subviews;
for (id obj in list) {
if ([obj isKindOfClass:[UIImageView class]]) {
UIImageView *imageView = (UIImageView *)obj;
NSArray *list2 = imageView.subviews;
for (id obj2 in list2) {
if ([obj2 isKindOfClass:[UIImageView class]]) {
UIImageView *imageView2 = (UIImageView *)obj2;
imageView2.hidden = YES;
}
}
}
}
}