iOS 사용자 정의 탐색 모음 노트

6540 단어
1. UINavigationBar의 구조
내비게이션 표시줄은 거의 모든 페이지에서 부딪히는 문제로 일반적으로 두 가지 처리 방식이 있다. 1.숨기기 2.사용자 정의
1. 탐색 모음 추가
TestViewController * mainVC = [[TestViewController alloc] init];
UINavigationController * nav = [[UINavigationController alloc] initWithRootViewController:mainVC];
    self.window.rootViewController = nav;

2. 탐색 모음 숨기기
의 TestViewController.m 파일에서 다음 코드를 사용합니다.
- (void)viewDidLoad {
    [super viewDidLoad];
    
    [self.navigationController setNavigationBarHidden:YES];
    //self.navigationController.navigationBar.hidden = YES;
}

설명: 속성 직접 설정을 통해 성공할 수 있는 것은navigationBar는readonly이지만hidden은 기본값(readwrite)이기 때문입니다.첫 번째, 메시지를 보내서 설정하는 것을 권장합니다.
3. 탐색 모음 배경색 수정
시스템이 자체로 가지고 있는 내비게이션 표시줄은 이미 사용자의 심미적 수요를 만족시킬 수 없기 때문에 개발 중의 내비게이션 표시줄은 많든 적든 모두 사용자 정의되었다.배경색이나 글꼴 색만 수정해도
  • 방법1: 에이전트를 통해 설정
  • [[UINavigationBar appearance] setBarTintColor:[UIColor redColor]];
    

    효과도
    설명: 왜 모든 내비게이션 표시줄의 배경색을 수정할 수 있습니까?
  • UINavigationBar가 보낸 메시지 보기 appearance는 UIappearance 프로토콜입니다.공식 홈페이지에 따르면 UIappearance는 외관 프로토콜(장식 모드)이다.외관을 바꾸려면 이 프로토콜을 실현해야 하기 때문에 UINavigationBar 내부에서 이 프로토콜을 실현한 것이 틀림없다.
  • 헤더 파일 UIappearance 프로토콜에 4가지 방법이 있지만 홈페이지 문서에 따르면 iOS9 이후 두 가지 방법이 폐기됐다.따라서 아래 두 개만 사용할 수 있고 모두 클래스의 대상으로 되돌아오기 때문에 외관을 수정하는 메시지를 보낼 수 있습니다.예: setBarTintColor.사실 이곳은 대상을 받은 후 마음대로 수정할 수 있다.
  • + (instancetype)appearance;
    + (instancetype)appearanceForTraitCollection:(UITraitCollection *)trait
    
  • 방식 2. 속성 설정을 직접 통과하거나 메시지를 보내는 방식으로 설정
  • 의 TestViewController.m 파일에서 다음 코드를 사용합니다.
    - (void)viewDidLoad {
        [super viewDidLoad];
        //    
        self.navigationController.navigationBar.backgroundColor = [UIColor redColor];
        //   
        [self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@"nav.png"] forBarMetrics:UIBarMetricsDefault];
    }
    

    설명:
  • 아래 코드가 왜 효과가 없는지 사실 구조도를 보면 알 수 있다.
  • self.navigationController.navigationBar.backgroundColor = [UIColor redColor];
    

    UINavgationBar 맵
    맞아요: 이렇게 수정된 것은navigationBar의 배경색입니다.navigationBar에는 UIView와 UIImageView, UIlabel 등 컨트롤이 추가되어 있어navigationBar를 덮어씁니다.
  • 그럼 어떻게 수정합니까?
  • [self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@"yao_1"] forBarMetrics:UIBarMetricsDefault];
    

    배경 그림을 추가하면 기본 모드를 사용합니다.주의: 상태 표시줄의 배경색도 변하는 문제가 발생할 수 있습니다. 사실navigationBar에 추가된 컨트롤러가 자동으로 경계로 뻗어 있기 때문입니다.네비게이션 표시줄의 배경색만 수정하면 나비게이션 Bar에 컨트롤을 추가할 필요가 없습니다. 나비게이션 Bar에 쓸모없는 컨트롤을 너무 많이 쌓아서 참을 수 없습니다.
    //     
    [self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@"yao_1"] forBarMetrics:UIBarMetricsCompact];
    //   navigationBar    
    self.navigationController.navigationBar.backgroundColor = [UIColor redColor];
    

    이렇게 navigationBar 배경색을 수정해야 상쾌한 느낌을 줄 수 있어요.왜냐하면 난 나비게이션 바의 배경색만 수정하는 거니까.효과도:
    UINavgationBar 효과도
    왜 이러니
    [[UINavigationBar appearance] setBarTintColor:[UIColor redColor]];
    

    아니면 왜 이러는지.
    [self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@"yao_1"] forBarMetrics:UIBarMetricsDefault];
    

    UINavigationBar와 UINavigationController, UIViewController 관계
    1. 내비게이션 표시줄 클래스 이름: UINavigation Bar는 내비게이션 컨트롤러(UINavgation Controller)의 다음 속성으로 보통 보기 컨트롤러(Test View Controller)에 내비게이션 표시줄을 추가한다. 즉, 그것을 내비게이션 컨트롤러(UINavgation Controller)의 루트 보기 컨트롤러로 추가한다.
    2. 이 보기 컨트롤러에서 왜 네비게이션 컨트롤러를 직접 조작할 수 있습니까? 왜냐하면TestViewController 클래스는 사용자 정의로 UIViewController 클래스를 계승하기 때문입니다.UIViewController 클래스에는 UINavgationController 클래스의 속성을 설명하는 클래스가 있습니다.첫 번째 단계에서 이 속성을 위 내비게이션 컨트롤러의 대상으로 설정합니다.
    UIController 분류
    3. UINavigationBar 다이어그램은 다음과 같습니다.
    UINavigationBar 대조도
    UINavgationBar 맵 설명:
  • 그림의 대조 관계를 보면 UINavigationBar에는 UINavigationBarBackground 컨트롤(경계까지 뻗어 내비게이션 표시줄을 덮어썼음), 또 다른 UINavigationBarBackIndicatorView(사실 그 파란색 되돌아오는 버튼,push가 들어오면 ViewController가 표시됨)
  • 가 포함되어 있다.
  • UINavigationBarBackground 컨트롤에는 UIBAckdropView(UIBAckdropEffectView 표지음영시도), UIImageView
  • 가 포함되어 있습니다.
    요약:
    UINavigationBarBackIndicatorView (되돌아오는 단추는 왼쪽 부분만 차지하고,push의 새로운 보기 컨트롤러에 표시됩니다. 따라서 맨 위에 있는 것은 UIImageView입니다.)그래서 이것이야말로 코드를 통해
    self.navigationController.navigationBar.backgroundColor = [UIColor redColor];
    

    배경색을 수정하는 것이 항상 가려지는 근본적인 원인이다.해결 방법은 UIImageView 컨트롤을 지우거나 아예 UIImageView에 원하는 배경색 그림을 설정하는 것입니다.
    2. UINavigationBar의 사용자 정의
    1. 사용자 정의
    일반 사용자 정의는 왼쪽, 오른쪽, 중간 세 가지 상황으로 나뉜다.
  • 사용자 정의 왼쪽 버튼
  • - (void)viewDidLoad {
        [super viewDidLoad];
        //           
        UIButton * leftBtn = [UIButton buttonWithType:UIButtonTypeRoundedRect];
        leftBtn.frame = CGRectMake(0, 7, 83, 30);
        leftBtn.backgroundColor = [UIColor orangeColor];
        [leftBtn addTarget:self action:@selector(onTap) forControlEvents:UIControlEventTouchUpInside];
        UIBarButtonItem * leftItem = [[UIBarButtonItem alloc] initWithCustomView:leftBtn];
        self.navigationItem.leftBarButtonItem = leftItem;
    }
    
    //       
    - (void)onTap {
        NSLog(@"          ");
    }
    
  • 사용자 정의 오른쪽 버튼
  • 다음과 같이 왼쪽 버튼을 사용자화하는 방법과 유사합니다.
    self.navigationItem.rightBarButtonItem = rightItem;
    
  • 중간 사용자 정의
  • UIView * centerView = [[UIView alloc] initWithFrame:CGRectMake(0, 7, 110, 30)];
    centerView.backgroundColor = [UIColor greenColor];
    self.navigationItem.titleView = centerView;
    

    2. 구조 분석
    사용자 정의 코드에서 볼 수 있듯이, 사용자 정의는navigationItem 안의 것을 수정하는 것이다.헤더 파일을 보면TestViewController가navigationItem을 조작할 수 있는 이유는 위의 UINavigationController와 같습니다.
    UINavigationBar 클래스에는 navigationItem 및 기타 관련 내용을 저장하는 items 집합이 있습니다.UINavigationItem 클래스에는 leftBarButtonItems, rightBarButtonItems 등의 집합이 저장되어 있습니다.또한 leftBarButtonItem, rightBarButtonItem 컨트롤도 있습니다. 집합이 비어 있는지 여부에 따라 이 컨트롤을 만들고 표시할지 여부를 결정합니다.
    따라서 내용을 설정하지 않을 때 기본 집합이 비어 있고 모든 컨트롤이 표시되지 않습니다.
    3. 핸드 코드 기법
    내비게이션 표시줄의 사용자 정의에 대해 대부분의 앱은 왼쪽은'되돌아오기', 오른쪽은'지도','스캔하기'등 단추로 중간에 제목을 표시하는 것 외에 세그먼트 단추를 사용자 정의하고 메뉴를 선택할 수 있다.이러한 사용자 정의 단추와 보기에 대해사이즈는 이미지 사이즈와 네비게이션 표시줄의 넓이에 따라 감각적으로 설정된 것이다(어쨌든 나는 예전에 이랬다>. 오늘 아이폰 7의 레이아웃에서 SB를 사용했는데 컨트롤러를 끌어올리면 시스템이 정한 사이즈에 적응하는 것을 발견했다. 그리고 나는 컨트롤러를 연결하여 이 컨트롤러의 사이즈를 얻었다. 아이폰4s와 아이폰6를 테스트했다. 얻은 왼쪽과 오른쪽 단추의 사이즈: 프레임 = {0,7,83,30}, 중간 뷰 크기: 프레임 = {0, 7110, 30}.이렇게 하면 앞으로 내비게이션 표시줄 단추가 특별한 요구가 없으면 모두 이 사이즈에 따라 설정할 수 있다.

    좋은 웹페이지 즐겨찾기