iOS 7 : 전체 앱에 대해 UINavigationBar 반투명 비활성화
전체 애플리케이션에 대해 UINavigationBar Translucency를 비활성화하는 방법이 있습니까?
사용 [self.navigationController.navigationBar setTranslucent:NO]
하면 단일 컨트롤러에 대해이 문제를 해결할 수 있지만 응용 프로그램에 많은 UINavigationBars가 있으며 이것은 매우 지루한 솔루션입니다.
나는 시도 [[UINavigationBar appearance] setTranslucent:NO]
했지만 그 기능은 의외로 지원되지 않습니다. 그 결과Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** Illegal property type, c for appearance setter, _installAppearanceSwizzlesForSetter:'
해야 할 경우 전체 앱 설정 UINavigationBars를 통해 투명도를 하나씩 비활성화 할 수 있지만이 문제에 대한 좀 더 우아한 해결책이 있어야합니다.
스택에있는 첫 번째 탐색 모음의 반투명을로 설정하면 해당 스택으로 false
[self.navigationController.navigationBar setTranslucent:NO]
푸시되는 다음 모든 NavigationViewController에 반영됩니다.
이 스타일링을 전체 앱에 적용하려는 경우 Swift 솔루션이 있습니다.
AppDelegate
클래스 에서 이것을 추가하십시오 didFinishLaunchingWithOptions
:
Swift 2 :
UINavigationBar.appearance().translucent = false
Swift 3 :
UINavigationBar.appearance().isTranslucent = false
이 코드로 매우 간단 해 보입니다 appDelegate
didFinishLaunchingWithOptions
(iOS 8 이상 버전에서 잘 작동 함).
[[UINavigationBar appearance] setTranslucent:NO];
이 속성에 대한 외모 프록시를 사용할 수 없다는 것이 옳다고 생각합니다. UINavigationControllers 또는 UINavigationBar 개체를 사용하고 있습니까? UINavigationBars를 사용하는 경우 하위 클래스를 만들고 반투명하지 않은 탐색 모음을 만들 수 있습니다.
헤더 파일 :
#import <UIKit/UIKit.h>
@interface ABCNonTranslucentNavBar : UINavigationBar
@end
구현 파일 :
#import "ABCNonTranslucentNavBar.h"
@implementation ABCNonTranslucentNavBar
- (void)drawRect:(CGRect)rect
{
[self setTranslucent:NO];
}
그런 다음 UINavigationBars를 하위 클래스로 바꿉니다. 하위 클래스 UINavigationController를 사용하여 유사한 작업을 수행 할 수도 있습니다.
누군가가 여전히이 문제에 맞서 싸우는 경우를 대비하여 추가합니다.
존재하지 않는 이미지를 지정하여 속일 수 있습니다. 그러면 도구 모음을 포함하여 탐색 모음이 불투명하게됩니다.
[[UIToolbar appearance] setBackgroundColor:[UIColor colorWithRed:219.0/255.0 green:67.0/255.0 blue:67.0/255.0 alpha:1.0]];
[[UIToolbar appearance] setBackgroundImage:[[UIImage alloc] init] forToolbarPosition:UIBarPositionAny barMetrics:UIBarMetricsDefault];
나는 이것이 오래되었다는 것을 알고 있지만 이것은 누군가에게 유용 할 수 있습니다.
범주를 사용할 수 있으며 그 안에 속성을 설정하십시오. [translucent][1]
@implementation UINavigationBar (MakeTranslucent)
-(void)willMoveToWindow:(UIWindow *)newWindow {
[super willMoveToWindow:newWindow];
self.translucent = NO;
}
@end
- 나는 willMoveToWindow를 사용했는데 이것이 좋은 생각인지 모르겠다.
외관 API는 네비게이션 바의 반투명 속성을 지원하지 않는다고 생각합니다. 하지만 이처럼 전체 앱에 대해이 작업을 수행 할 수 있습니다.이 코드를 살펴보세요.
여기 메뉴 화면은 루트 뷰 컨트롤러입니다.
MenuScreen *ms = [[MenuScreen alloc]initWithNibName:@"MenuScreen" bundle:nil];
UINavigationController *nv = [[UINavigationController alloc]initWithRootViewController:ms];
//This will set property for whole App.
[nv.navigationBar setTranslucent:NO];
self.window.rootViewController = nv ;
UIKit 코드 문서에서 발췌 한 내용을 참조하십시오.
/*
New behavior on iOS 7.
Default is YES.
You may force an opaque background by setting the property to NO.
If the navigation bar has a custom background image, the default is inferred
from the alpha values of the image—YES if it has any pixel with alpha < 1.0
If you send setTranslucent:YES to a bar with an opaque custom background image
it will apply a system opacity less than 1.0 to the image.
If you send setTranslucent:NO to a bar with a translucent custom background image
it will provide an opaque background for the image using the bar's barTintColor if defined, or black
for UIBarStyleBlack or white for UIBarStyleDefault if barTintColor is nil.
*/
올바른 Swift 4 솔루션은
UINavigationBar.appearance().isTranslucent = false
UINavigationBar.appearance().backgroundColor = .white
스토리 보드를 사용하지 않고 IB를 사용하는 경우 MainWindows.xib의 탐색 모음 스타일을 반투명 아님으로 설정하고 명확한 색상이 아닌 색상으로 설정하십시오.
'programing' 카테고리의 다른 글
호스트에 대한 pg_hba.conf 항목이 없습니다. (0) | 2021.01.15 |
---|---|
타 일드 드로어 블이 때때로 늘어남 (0) | 2021.01.15 |
컨볼 루션 신경망의 배치 정규화 (0) | 2021.01.15 |
열, 마지막 항목 너비로 네이티브 FlatList 반응 (0) | 2021.01.15 |
IE8에서 http 응답 헤더 검사 (0) | 2021.01.15 |