iOS 내 비게 이 션 표시 줄 의 기본 사용 집합
네 비게 이 션 표시 줄 의 스타일 을 설정 하면 전역 설정 과 부분 설정 으로 나 눌 수 있 습 니 다.
1.전역 설정
전역 설정 은 일반적으로 AppDelegate 에서 설정 합 니 다.그러면 전체 app 이 유효 합 니 다.관련 코드 와 효과 도 는 다음 과 같 습 니 다.
//1.
[[UINavigationBar appearance] setBarTintColor:[UIColor orangeColor]];
//2.
[[UINavigationBar appearance] setBackgroundImage:[UIImage imageNamed:@"navigationBarImg"] forBarMetrics:UIBarMetricsDefault];
//3.
[[UINavigationBar appearance] setTitleTextAttributes: [NSDictionary dictionaryWithObjectsAndKeys:
[UIColor purpleColor], NSForegroundColorAttributeName,
[UIFont boldSystemFontOfSize:25], NSFontAttributeName, nil]];
//4.
[[UINavigationBar appearance] setTintColor:[UIColor greenColor]];
//5.
[[UINavigationBar appearance] setHidden:YES];
탐색 표시 줄 스타일 효과 그림 설정
2.부분 설정:
전역 설정 후,그 중 몇 개의 페이지 내 비게 이 션 표시 줄 스타일 만 다 르 면,우 리 는 부분 설정 을 사용 할 수 있 습 니 다.
주의 1:부분 설정 은 전체 설정 방법 과 같 지만 호출 방법의 대상 은"self.navigationController.navigationBar"로 바 뀌 었 습 니 다.
주의 2:부분 설정 은 반드시 하나의 원칙 에 따라 야 합 니 다."페이지 에 들 어 갈 때 수정 하고 페이지 를 떠 날 때 복원 합 니 다."
예 를 들 어 우리 가 한 페이지 에 들 어가 면 현재 네 비게 이 션 표시 줄 의 배경 색 을 회색 으로 설정 하고 다음 과 같은 방법 을 사용 해 야 합 니 다.
// :
- (void)viewWillAppear:(BOOL)animated{
[super viewWillAppear:animated];
[self.navigationController.navigationBar setBarTintColor:[UIColor grayColor]];
}
// :
- (void)viewWillDisappear:(BOOL)animated{
[super viewWillDisappear:animated];
[self.navigationController.navigationBar setBarTintColor:[UIColor orangeColor]];
}
2.사용자 정의 네 비게 이 션 표시 줄 반환 단 추 를 해결 한 후 옆으로 미 끄 러 지 는 문 제 를 해결 합 니 다.iOS 네 비게 이 션 표시 줄 에 있 는 되 돌아 오 는 단추 형식 이 단일 하기 때문에 대부분의 경우 네 비게 이 션 표시 줄 되 돌아 오 는 단 추 를 사용자 정의 해 야 합 니 다.그러나 이때 우 리 는 페이지 의 사 이 드 슬라이딩 기능 이 사용 되 지 않 는 다 는 것 을 발견 했다.이 문 제 를 해결 하기 위해 서 는 App 에서 사용자 정의 네 비게 이 션 컨트롤 러 를 사용 해 야 합 니 다.예제 코드 는 다음 과 같 습 니 다.
#import “BaseNavigationController.h"
// : UIGestureRecognizerDelegate
@interface BaseNavigationController ()<UIGestureRecognizerDelegate>
@end
@implementation BaseNavigationController
- (void)viewDidLoad {
[super viewDidLoad];
// :
self.interactivePopGestureRecognizer.delegate = self;
}
// :
- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer{
if (self.childViewControllers.count == 1) {
// , ,
return NO;
}
return YES;
}
@end
3.탐색 표시 줄 아래쪽 의 분할 선 숨 기기네 비게 이 션 의 밑 부분 할선 을 숨 기 는 것 도 우리 가 가끔 만 나 는 개발 수요 입 니 다.먼저 우 리 는 Xcode 의 Debug View Hierarchy 기능 을 통 해 네 비게 이 션 표시 줄 의 보기 구 조 를 볼 수 있 습 니 다.효 과 는 다음 과 같 습 니 다.
탐색 표시 줄 보기 계층 도
그림 에서 알 수 있 듯 이 네 비게 이 션 바 의 밑부분 할선 은 UIImageView 대상 이 고 높이 는 0.5 에 불과 하기 때문에 우 리 는 이 를 통 해 네 비게 이 션 바 의 밑부분 할선 대상 을 얻 을 수 있 습 니 다.하나의 보기 컨트롤 러 에서 이 수 요 를 실현 할 수 있 습 니 다.코드 는 다음 과 같 습 니 다.
#import "TestViewController.h"
@interface TestViewController ()
// : ,
@property (nonatomic, strong) UIImageView *navBarBottomImage;
@end
@implementation TestViewController
- (void)viewDidLoad {
[super viewDidLoad];
//// :
UIImageView *navBarBottomImage = [self findNavBarBottomImage:self.navigationController.navigationBar];
self.navBarBottomImage = navBarBottomImage;
}
// :
//
- (void)viewWillAppear:(BOOL)animated{
[super viewWillAppear:animated];
self.navBarBottomImage.hidden = YES;
}
//
-(void)viewWillDisappear:(BOOL)animated{
[super viewWillDisappear:animated];
self.navBarBottomImage.hidden = NO;
}
// :
// UIImageView, 1.0 ,
-(UIImageView *)findNavBarBottomImage:(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 findNavBarBottomImage:subview];
if (imageView) {
return imageView;
}
}
return nil;
}
4.네 비게 이 션 표시 줄 에 의 한 레이아웃 문제1.내용 오프셋 속성:automaticallyAdjustsScrollViewInsets
automatically Adjusts ScrollView Insets 는 보기 컨트롤 러 의 속성 입 니 다.기본 값 은 YES 입 니 다.슬라이더 보기(UIScrollView 의 보기 계승)를 보기 제어 에 최적화 하 는 데 사 용 됩 니 다.
iOS 시스템 의 네 비게 이 션 표시 줄 UINavigation Bar 와 탭 표시 줄 UITabBar 는 기본적으로 반투명 퍼 지 효과 입 니 다.이 경우 시스템 은 보기 컨트롤 러 의 UI 레이아웃 을 최적화 합 니 다.보기 컨트롤 러 에 처음 추 가 된 보 기 는 미끄럼 류 보기 이 고 프레임 은 전체 화면 이 큰 시간 입 니 다.시스템 은 contenInset 을 자동 으로 조정 합 니 다.미끄럼 보기 의 내용 이 UINavigation Bar 와 UITabBar 에 가 려 지지 않도록 합 니 다.
그러나 일반적인 보기 에 대해 우 리 는 아직도 주의해 야 한다.비 미끄럼 보기 의 구 조 는 네 비게 이 션 표시 줄 과 태그 표시 줄 의 높이 를 고려 하고 가 려 지지 않도록 주의해 야 한다.예 를 들 어 구 조 를 할 때 네 비게 이 션 표시 줄 의 높이 를 더 해서 내용 이 네 비게 이 션 표시 줄 에 가 려 지지 않도록 해 야 한다.
우 리 는 코드 를 통 해 효 과 를 테스트 할 수 있 습 니 다.기본 네 비게 이 션 바(반투명)의 보기 컨트롤 러 에 다음 과 같은 코드 를 추가 할 수 있 습 니 다.
//UITextView , ,
UITextView *leftTextView = [[UITextView alloc] init];
leftTextView.frame = CGRectMake(0, 0,100, kDeviceHeight); //
leftTextView.backgroundColor = [UIColor lightGrayColor];
leftTextView.text = @" , , 。 , , 。 , 。 , 。";
leftTextView.font = [UIFont systemFontOfSize:18];
leftTextView.editable = NO;
[self.view addSubview:leftTextView];
//UIView ,
UIView *rightView= [[UIView alloc] initWithFrame:CGRectMake(150, 0, 100, 100)];
rightView.backgroundColor = [UIColor redColor];
[self.view addSubview:rightView];
탐색 표시 줄 이 투명 한 상태 에서 미끄럼 보 기 는 자동 으로 이동 하고 일반 보 기 는 가 려 집 니 다.
사실은 이런 시스템 의 최적화 도 닫 는 것 을 제어 할 수 있다.최 적 화 를 닫 은 후에 미끄럼 보 기 는 일반 보기 와 마찬가지 로 그 구조의 원점(0,0)을 설정 하면 그 내용 은 네 비게 이 션 표시 줄 에 덮 여 있 고 관건 적 인 코드 는 다음 과 같다.
//automaticallyAdjustsScrollViewInsets 11.0 ,
if (@available(iOS 11.0,*)) {
scrollView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;
}else{
//automaticallyAdjustsScrollViewIn,
self.automaticallyAdjustsScrollViewInsets = NO;
}
2.가장자리 확장 속성:edgesForExtendedLayoutedgesforExtended Layout 도 보기 컨트롤 러 의 레이아웃 속성 입 니 다.기본 값 은 UIRectEdgeAll 입 니 다.즉,현재 보기 컨트롤 러 에 있 는 각종 UI 컨트롤 러 는 네 비게 이 션 표시 줄 과 탭 의 존 재 를 무시 합 니 다.레이아웃 을 설정 할 때 원점 을(0,0)으로 설정 하면 보 기 는 네 비게 이 션 표시 줄 아래 로 확 장 됩 니 다.
따라서 설정 할 수 있 습 니 다
self.edgesForExtendedLayout=UIRectEdgeNone
.이때 보기 컨트롤 러 의 내용 은 네 비게 이 션 표시 줄 과 탭 표시 줄 을 피 할 수 있 습 니 다.위의 left TextView 와 rightView 입 니 다.UIRectEdge None 이후 의 효과 도 는 다음 과 같 습 니 다.self.edgesForExtendedLayout=UIRectEdgeNone
3.탐색 표시 줄 투명 속성 반투명
상기 두 가지 속성 은 모두 네 비게 이 션 표시 줄 의 반투명 한 상황 에서 의 레이아웃 문 제 를 해결 하 는 것 입 니 다.그러나 우리 의 수요 가 네 비게 이 션 표시 줄 의 불투명 이 라면 보기 컨트롤 러 의 컨트롤 러 는 기본적으로(0,64)부터 레이아웃 을 시작 합 니 다.네 비게 이 션 표시 줄 의 불투명 한 방법 은 다음 과 같 습 니 다.
self.navigationController.navigationBar.translucent= NO;
관련 글:iOS 상태 표시 줄 사용
총결산
이상 은 이 글 의 전체 내용 입 니 다.본 논문 의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 참고 학습 가치 가 있 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 댓 글 을 남 겨 주 셔 서 저희 에 대한 지지 에 감 사 드 립 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Swift의 패스트 패스Objective-C를 대체하기 위해 만들어졌지만 Xcode는 Objective-C 런타임 라이브러리를 사용하기 때문에 Swift와 함께 C, C++ 및 Objective-C를 컴파일할 수 있습니다. Xcode는 S...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.