programing

사용자 지정 탐색 모음 스타일-iOS

procenter 2021. 1. 16. 10:42
반응형

사용자 지정 탐색 모음 스타일-iOS


중복 가능성 :
iPhone 탐색 막대에 배경 이미지를 추가하는 방법은 무엇입니까?

iOS-NY Times는이 사용자 지정 상단 탐색 모음 스타일을 어떻게 수행 했습니까?

그리고 그 문제에 대해, 맨 아래?

뉴욕


편집 : 이것은 구식입니다. iOS5의 경우 @Jenox 훨씬 더 나은 답변이 아래 에 있습니다.

내비게이션 바에 대한 완전한 사용자 지정 스타일링은 놀랍도록 어렵습니다. 내가 아는 최고의 글은 Sebastian Celis의 글입니다. http://sebastiancelis.com/2009/12/21/adding-background-image-uinavigationbar/

이것은 drawRect를 재정의하지 않으며 이것이 좋은 이유에 대한 좋은 설명을 포함합니다. 또한 그의 튜토리얼을 따를 필요가 없습니다. 여기에서 전체 코드를 다운로드 할 수 있습니다 : https://github.com/scelis/ExampleNavBarBackground


그러나 @ludwigschubert의 솔루션은 iOS 5에서 작동하지 않습니다. 호출 도하지 않기 때문에을 재정의하지도 않습니다 -drawRect:.
iOS 5부터 탐색 모음은 a UINavigationBarBackgroundUINavigationItemView. 작동시키는 다른 두 가지 방법이 있습니다.


  1. 사용자 정의 이미지보기를 0 대신 인덱스 1에 삽입합니다. 이렇게하면 단추 아래에있는 동안 기본 배경 이미지 위에 표시됩니다.

  2. iOS 5의 UIAppearance 프로토콜을 사용합니다 . 모두에 대한 배경 이미지를 설정할 수 있습니다.

[[UINavigationBar appearance] setBackgroundImage:myImage forBarMetrics:UIBarMetricsDefault]

또는 하나의 탐색 모음에 대해 :

[navigationController.navigationBar setBackgroundImage:myImage forBarMetrics:UIBarMetricsDefault]

세로 및 가로 용 iPhone 앱을 개발할 때 두 개의 이미지 (UIBarMetricsDefault 및 UIBarMetricsLandscapePhone) 를 제공해야합니다 .


@Jenox가 제공 한 답변에 추가하기 위해 iOS 4.xx 및 iOS 5.xx 장치를 모두 지원하려면 (즉, DeploymentTarget이 4.xx 인 경우) 다음과 같이 외관 프록시에 대한 호출을 래핑 할 때주의해야합니다. 런타임에 '모양'선택기가 있는지 여부를 확인합니다.

다음과 같이 할 수 있습니다.

//Customize the look of the UINavBar for iOS5 devices
if ([[UINavigationBar class]respondsToSelector:@selector(appearance)]) {
    [[UINavigationBar appearance] setBackgroundImage:[UIImage imageNamed:@"NavigationBar.png"] forBarMetrics:UIBarMetricsDefault];
}

또한 구현했을 수있는 iOS 4.xx 해결 방법을 그대로 두어야합니다. @ludwigschubert가 언급 한대로 iOS 4.xx 장치에 대한 'drawRect'해결 방법을 구현 한 경우 다음과 같이 두어야합니다.

@implementation UINavigationBar (BackgroundImage)
//This overridden implementation will patch up the NavBar with a custom Image instead of the title
- (void)drawRect:(CGRect)rect {
     UIImage *image = [UIImage imageNamed: @"NavigationBar.png"];
     [image drawInRect:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)];
}
@end

이렇게하면 NavBar가 iOS 4 및 iOS 5 장치에서 동일하게 보입니다.


이것을 viewDidLoad에 복사하십시오. iOS 5를 확인하고 선호하는 방법을 사용합니다. 그렇지 않으면 iOS 버전 5.0 미만인 경우 navBar에 하위보기를 추가합니다. 사용자 정의 배경 이미지에 투명도가없는 경우 작동합니다.

float version = [[[UIDevice currentDevice] systemVersion] floatValue];
NSLog(@"%f",version);
UIImage *backgroundImage = [UIImage imageNamed:@"myBackgroundImage.png"];
if (version >= 5.0) {
    [self.navigationController.navigationBar setBackgroundImage:backgroundImage forBarMetrics:UIBarMetricsDefault];
}
else
{
    [self.navigationController.navigationBar insertSubview:[[[UIImageView alloc] initWithImage:backgroundImage] autorelease] atIndex:1];
}

카테고리를 생성하고 이미지, 버튼, 슬라이더 등 원하는보기를 추가하는 사용자 지정 방법을 생성 할 수 있습니다. 적의 예, 여기에 내가 사용하는 코드가 있습니다-사용자 정의 backgroundimage, backButton 및 Label을 추가합니다.

@interface UINavigationBar (NavigationBar)
-(void)setBarForCard;
@end


@implementation UINavigationBar (NavigationBar)

-(void)setBarForCard
{

    UIImageView *aTabBarBackground = [[UIImageView alloc]initWithImage:[UIImage imageNamed:@"BarImage"]];
    aTabBarBackground.frame = CGRectMake(0,0,self.frame.size.width,44);
    [self addSubview:aTabBarBackground];
    [self sendSubviewToBack:aTabBarBackground];
    [aTabBarBackground release];

    UIButton *backBtn = [UIButton buttonWithType:UIButtonTypeCustom];
    backBtn.frame =CGRectMake(10, 8, 60, 30);
    [backBtn addTarget:self action:@selector(back:)forControlEvents:UIControlEventTouchUpInside];
    [backBtn setImage:[UIImage imageNamed: @"Back"] forState:UIControlStateNormal];
    [self addSubview:backBtn];

    UILabel *calendar = [[UILabel alloc]init];
    calendar.frame = CGRectMake(105, 13, 109, 21);
    calendar.text = @"Calendar"
    calendar.textColor = [UIColor whiteColor];
    calendar.textAlignment = UITextAlignmentCenter;
    calendar.shadowColor = [UIColor grayColor];
    calendar.shadowOffset = CGSizeMake(0, -1);
    calendar.font = [UIFont fontWithName:@"HelveticaNeue-Bold" size:20];
    calendar.backgroundColor = [UIColor clearColor];    
    [self addSubview:calendar];


}

그런 다음 모든 뷰 컨트롤러에서 다음을 호출하여 탐색 모음을 변경할 수 있습니다. [self.navigationController.navigationBar setBarForCard];

이것은 IOS 4IOS 5 에서 모두 작동합니다.


이것은 iOS 5에 더 좋은 방법입니다.

if ([self.navigationController.navigationBar respondsToSelector:@selector(setBackgroundImage:forBarMetrics:)] ) {
 UIImage *image = [UIImage imageNamed:@"navBarImg.png"];
 [self.navigationController.navigationBar setBackgroundImage:image forBarMetrics:UIBarMetricsDefault];
}

탐색 모음의 색조 색상을 변경하여 색상을 변경할 수 있으며 탐색 모음보기에서 이미지를 사용할 수도 있습니다. 하단 막대의 경우 세 개의 사용자 정의 버튼이있는보기를 사용하고 있다고 생각합니다.

참조 URL : https://stackoverflow.com/questions/5575821/custom-nav-bar-styling-ios

반응형