이미지를 제목으로 UINavigationBar로 설정할 수 있습니까?
일부 이미지를 내비게이션 바의 제목으로 설정할 수 있습니까?
NYTimes 응용 프로그램이 내비게이션 바를 사용하고 제목이 이미지 파일처럼 보입니다 (그것이 보이는 이유 UINavigationBar
는 검색에 오른쪽 버튼을 사용하기 때문입니다).
당신이 사용할 수 UIImageView
에 대한 UINavigationItem.titleView
특성, 같은 :
self.navigationItem.titleView = myImageView;
높이가 약 35px 인 투명한 .png가 잘 작동한다는 것을 알았습니다.
- (void)awakeFromNib {
//put logo image in the navigationBar
UIImageView* img = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"logo.png"]];
self.navigationItem.titleView = img;
[img release];
}
스토리 보드에서 바로 수행 할 수 있습니다 (Xcode 7 기준).
- 뷰 컨트롤러의 메인 뷰 외부에 뷰를 만듭니다. 중첩 된보기 또는 이미지 일 수 있습니다.
- 뷰 컨트롤러에 탐색 항목 추가
- Ctrl + 탐색 항목에서 끌어서 외부보기에 놓기
4. 타이틀보기 선택
다음과 같이 UINavigationBar에 대한 사용자 지정 범주를 만들었습니다.
UINavigationBar + CustomImage.h
#import <UIKit/UIKit.h>
@interface UINavigationBar (CustomImage)
- (void) setBackgroundImage:(UIImage*)image;
- (void) clearBackgroundImage;
- (void) removeIfImage:(id)sender;
@end
UINavigationBar + CustomImage.m
#import "UINavigationBar+CustomImage.h"
@implementation UINavigationBar (CustomImage)
- (void) setBackgroundImage:(UIImage*)image {
if (image == NULL) return;
UIImageView *imageView = [[UIImageView alloc] initWithImage:image];
imageView.frame = CGRectMake(110,5,100,30);
[self addSubview:imageView];
[imageView release];
}
- (void) clearBackgroundImage {
NSArray *subviews = [self subviews];
for (int i=0; i<[subviews count]; i++) {
if ([[subviews objectAtIndex:i] isMemberOfClass:[UIImageView class]]) {
[[subviews objectAtIndex:i] removeFromSuperview];
}
}
}
@end
내 UINavigationController에서 호출합니다.
[[navController navigationBar] performSelectorInBackground:@selector(setBackgroundImage:) withObject:image];
이 라인은 당신을 위해 일할 것입니다, 나는 항상 이것을 사용합니다
[self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@"imageNavBar.png"] forBarMetrics:UIBarMetricsDefault];
제목이 사용자에게 계속 표시되도록 UINavigationBar + CustomImage.m을 수정했습니다. addSubview 대신 insertSubview : atIndex :를 사용하십시오.
UINavigationBar + CustomImage.m
#import "UINavigationBar+CustomImage.h"
@implementation UINavigationBar (CustomImage)
- (void) setBackgroundImage:(UIImage*)image {
if (image == NULL) return;
UIImageView *imageView = [[UIImageView alloc] initWithImage:image];
imageView.frame = CGRectMake(0, 0, 320, 44);
[self insertSubview:imageView atIndex:0];
[imageView release];
}
- (void) clearBackgroundImage {
NSArray *subviews = [self subviews];
for (int i=0; i<[subviews count]; i++) {
if ([[subviews objectAtIndex:i] isMemberOfClass:[UIImageView class]]) {
[[subviews objectAtIndex:i] removeFromSuperview];
}
}
}
@end
이것도 잘 작동합니다
[self.navigationController.navigationBar.topItem setTitleView:[[UIImageView alloc]initWithImage:[UIImage imageNamed:@"YourLogo"]]];
스토리 보드 및 @IBDesignable
다음을 사용하여 빠르게 수행하십시오 .
@IBDesignable class AttributedNavigationBar: UINavigationBar {
@IBInspectable var imageTitle: UIImage? = nil {
didSet {
guard let imageTitle = imageTitle else {
topItem?.titleView = nil
return
}
let imageView = UIImageView(image: imageTitle)
imageView.frame = CGRect(x: 0, y: 0, width: 40, height: 30)
imageView.contentMode = .scaleAspectFit
topItem?.titleView = imageView
}
}
}
그런 다음 속성 관리자에서 이미지를 선택하십시오.
결과를 기다리십시오.
설정보기는 스토리 보드에 있어야합니다.
같은 오류가 있지만에서 사람들을 위해 Xamarin Forms
,이 솔루션은을 만드는 것입니다 Renderer
년 iOS
과 같이 이미지를 응용 프로그램 및 설정 :
[assembly: Xamarin.Forms.ExportRenderer(typeof(Xamarin.Forms.Page), typeof(MyApp.Renderers.NavigationPageRenderer))]
namespace MyApp.Renderers
{
#region using
using UIKit;
using Xamarin.Forms.Platform.iOS;
#endregion
public class NavigationPageRenderer : PageRenderer
{
public override void ViewDidLoad()
{
base.ViewDidLoad();
SetTitleImage();
}
private void SetTitleImage()
{
UIImage logoImage = UIImage.FromFile(ResourceFiles.ImageResources.LogoImageName);
UIImageView logoImageView = new UIImageView(logoImage);
if (this.NavigationController != null)
{
this.NavigationController.NavigationBar.TopItem.TitleView = logoImageView;
}
}
}
}
누군가에게 도움이되기를 바랍니다!
메모리 누수없이 제대로 작동하도록 UINavigationBar + CustomImage 코드를 수정했습니다.
- (void)setBackgroundImage:(UIImage *)image
{
if (! image) return;
UIImageView *imageView = [[UIImageView alloc] initWithImage:image];
imageView.frame = CGRectMake(0, 0, self.frame.size.width, self.frame.size.height);
[self addSubview:imageView];
[imageView release];
}
- (void) clearBackgroundImage
{
// This runs on a separate thread, so give it it's own pool
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
NSArray *mySubviews = self.subviews;
// Move in reverse direction as not to upset the order of elements in the array
for (int i = [mySubviews count] - 1; i >= 0; i--)
{
if ([[mySubviews objectAtIndex:i] isMemberOfClass:[UIImageView class]])
{
[[mySubviews objectAtIndex:i] removeFromSuperview];
}
}
[pool release];
}
다음은 C # .NET을 사용하는 (Xamarin의) MonoTouch에서이 작업을 수행하는 방법입니다.
Create a UIViewConvrtoller that is in a NavigationController then call this at any time:
someNiceViewControllerYouMade.NavigationController.NavigationBar
.InsertSubview(new UIImageView
(MediaProvider.GetImage(ImageGeneral.navBar_667x44)),0);
Note: MediaProvider is just a class that fetches images.
This example allows for the view to fill the full Navigation Bar , and lets the text for the items caption appear too.
If your buttons disappear when you navigate back and forth the navigation, this fixed it for me:
NSArray *mySubviews = navigationBar.subviews;
UIImageView *iv = nil;
// Move in reverse direction as not to upset the order of elements in the array
for (int i = [mySubviews count] - 1; i >= 0; i--)
{
if ([[mySubviews objectAtIndex:i] isMemberOfClass:[UIImageView class]])
{
NSLog(@"found background at index %d",i);
iv = [mySubviews objectAtIndex:i];
[[mySubviews objectAtIndex:i] removeFromSuperview];
[navigationBar insertSubview:iv atIndex:0];
}
}
Just use
[navController.navigationBar insertSubview:myImage atIndex:0] ;
where myImage is of type UIImageView and navController is of type UINavigationController
ios5.0 introduced a heap of features to customise the appearance of standard elements. If you didn't want to use an ImageView for the title, an alternative would be to customise the appearance of all UINavbars using a background image and a custom font/colour.
- (void) customiseMyNav
{
// Create resizable images
UIImage *portraitImage = [[UIImage imageNamed:@"nav_bar_bg_portrait"]
resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, 0, 0)];
UIImage *landscapeImage = [[UIImage imageNamed:@"nav_bar_bg_landscape"]
resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, 0, 0)];
// Set the background image
[[UINavigationBar appearance] setBackgroundImage:portraitImage forBarMetrics:UIBarMetricsDefault];
[[UINavigationBar appearance] setBackgroundImage:landscapeImage forBarMetrics:UIBarMetricsLandscapePhone];
// set the title appearance
[[UINavigationBar appearance] setTitleTextAttributes:
[NSDictionary dictionaryWithObjectsAndKeys:
[UIColor colorWithRed:50.0/255.0 green:150.0/255.0 blue:100/255.0 alpha:1.0],
UITextAttributeTextColor,
[UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.6],
UITextAttributeTextShadowColor,
[NSValue valueWithUIOffset:UIOffsetMake(0, -1)],
UITextAttributeTextShadowOffset,
[UIFont fontWithName:@"Arial-Bold" size:0.0],
UITextAttributeFont,
nil]];
}
In MonoTouch you can use this:
this.NavigationItem.TitleView = myImageView;
크기에 맞게 조정되고 경계에 맞게 클립되는 SWIFT 를 사용 하여 naviagtionBar에 이미지를 추가 합니다. 뷰 컨트롤러 viewDidLoad () 함수 내에서이 함수를 호출 할 수 있습니다.
func setupNavigationBarWithTitleImage(titleImage: UIImage) {
let imageView = UIImageView(image: titleImage)
imageView.contentMode = .ScaleAspectFit
imageView.clipsToBounds = true
navigationItem.titleView = imageView
}
참고 URL : https://stackoverflow.com/questions/289441/can-i-set-image-as-a-title-to-uinavigationbar
'Programing' 카테고리의 다른 글
번호로 정렬하는 SQL-1,10,11,12 대신 1,2,3,4 등 (0) | 2020.11.13 |
---|---|
Web API 컨트롤러에서 기본 URL을 얻는 방법은 무엇입니까? (0) | 2020.11.13 |
레이아웃 방향을 세로로 고정하는 방법은 무엇입니까? (0) | 2020.11.13 |
금지됨이 서버에 액세스 할 수있는 권한이 없습니다. (0) | 2020.11.13 |
문자열이 C #에서 유효한 IPv4 또는 IPv6 주소인지 확인하는 방법은 무엇입니까? (0) | 2020.11.13 |