UITabBarItem 이미지를 아래로 이동 하시겠습니까?


98

일반적으로의 각 탭 UITabBar에는 탭 이름을 지정하는 작은 이미지와 제목이 있습니다. 이미지는 아래의 제목을 수용하기 위해 탭의 상단을 향해 위치 / 중앙에 배치됩니다. 내 질문은 : 이미지 만있는 tabBar를 원하고 제목이없는 경우 이미지를 아래로 이동하여 탭 내에서 더 중앙에 위치하도록하는 방법이 있습니까?

현재 사용 중입니다 (아래 참조).

[tabBarItem setFinishedSelectedImage:tabSelected withFinishedUnselectedImage:tabUnselected];

그러나 제목이없는 더 큰 이미지를 사용하는 것을 선호합니다. 현재 이미지를 약 70pixels @ 2x보다 크게 만들면 UITabBar아래쪽에 사용되지 않은 공간이 많이 남는 동안 위쪽에서 가장자리가 튀어 나오기 시작합니다 .

답변:


179

조정 해보십시오 tabBarItem'들 imageInsets과 (어떤 제목이 표시되지 않도록) 전무에 컨트롤러 제목을 설정 (아이콘 이미지를 이동). 뷰 컨트롤러에 다음과 같이 -init또는 -viewDidLoad메소드 를 넣으십시오 .

목표 -C

self.tabBarItem.imageInsets = UIEdgeInsetsMake(6, 0, -6, 0);
self.title = nil;

빠른

self.tabBarItem.imageInsets = UIEdgeInsets(top: 6, left: 0, bottom: -6, right: 0)
self.title = nil

UITabBarItem의 서브 UIBarItem갖는 UIEdgeInsets imageInsets속성. 보기 좋게 보일 때까지 삽입물로 약간 재생 (탭바 아이콘 이미지에 따라 다름)


3
@Lukas : 그러나 이것은 이미지를 축소합니다.
Sourabh Bhardwaj 2014 년

1
@Sourabh합니까 나를 위해 그들을 축소하지
TigerCoding

7
픽셀 완벽이 필요한 경우 실제 삽입 값은 5.5f입니다.
사용자

1
@ rr1g0 배지를 사용자 지정 위치로 이동할 수 없습니다. 당신이 배지 또는 사용자 정의 배지 모양의 사용자 정의 위치가 필요한 경우, 당신은 직접 구현해야합니다
루카스 Kukacka에게

1
@Sourabh 이미지를 축소하지 않으려면 음수 값으로 하단을 오프셋해야합니다.
Rmalmoe 2018-08-24

150

스토리 보드를 통해서도 할 수 있습니다. 탭바 항목을 선택하고 크기 검사기로 이동하여 적절한 삽입물을 지정하십시오.

여기에 이미지 설명 입력

* Xcode 버전 7.3.1 (7D1014)에서 시연


멋지고 깨끗합니다!
ken

답변 무엇보다도 ... 당신이 너무 @Neil Galiaskarov 감사
Venkatesh Chejarla

49

의 하위 클래스를 만들고 UITabBarController그 안에 viewDidLoad:

- (void)viewDidLoad
{
    [super viewDidLoad];
    [self.viewControllers enumerateObjectsUsingBlock:^(UIViewController *vc, NSUInteger idx, BOOL *stop) {
        vc.tabBarItem.title = nil;
        vc.tabBarItem.imageInsets = UIEdgeInsetsMake(5, 0, -5, 0);
    }];
}

스위프트 3 :

for vc in self.viewControllers! {
    vc.tabBarItem.title = nil
    vc.tabBarItem.imageInsets = UIEdgeInsetsMake(5, 0, -5, 0)
}

이것은 나를 위해 일했습니다. 그냥은 신속하기위한 방법의 enumerateObjectsUsingBlock은 더 이상 사용할 수 없습니다
Junchao 구

서브 클래스, 대신 AppDelegate에에에 넣고하지 않습니다
라즐로

1
이 스 니펫을 넣는 AppDelegate것도 작동하지만 서브 클래 싱하는 것보다 분명히 낫지는 않습니다. 당신은 :)하지만 마음대로 할 수 있습니다
브라이언

10

Xamarin을 사용하는 경우 다음과 같이 작동합니다.

screen.TabBarItem.ImageInsets = new UIEdgeInsets(5, 0, -5, 0);
screen.TabBarItem.Title = "";

10

이것은 나를 위해 일했습니다.

스위프트 4

let array = tabBarController?.customizableViewControllers
for controller in array! {
    controller.tabBarItem.imageInsets = UIEdgeInsetsMake(5, 0, -5, 0)
}

2

SWIFT 3.0

이미지 lnsets, set top, left, bottom, right desing에 따라 설정할 수 있습니다.

self.tabBarItem.imageInsets = UIEdgeInsets(top: 5, left: 0, bottom: 0, right: 0)

2

iOS 11의 경우 ImageInsets 설정과 별도로 TraitCollection 메서드 를 재정의해야합니다 . 서브 클래 싱 된 UITabBarController 클래스에 메소드를 추가하십시오.

public override UITraitCollection TraitCollection {
 get {
  return UITraitCollection.FromHorizontalSizeClass(horizontalSizeClass: UIUserInterfaceSizeClass.Compact);
 }
}

iPad 및 iOS 11에서 탭 막대 항목의 이미지 위치와 관련된 문제를 해결하는 데 도움이 된 좋은 팁입니다.하지만 뷰 컨트롤러 수준에서 트레이 트 컬렉션을 재정의하기에는 너무 가혹합니다. UITabBar 클래스를 하위 클래스로 만들고 traitCollection 속성을 재정의하는 것이 좋습니다. 그곳에. 또한 수평 클래스 만있는 트레이 트 컬렉션을 반환하면 다른 트레이 트 컬렉션 속성이 삭제됩니다. return UITraitCollection(traitsFrom: [ super.traitCollection, UITraitCollection(horizontalSizeClass: .compact)])나를 위해 트릭을했다.
Emmanuel Paris

1

에서 스위프트 4.2 , UIEdgeInsetsMakedepricated되고, 대신에 우리는 사용해야합니다 UIEdgeInsets,

let array = tabBarController?.customizableViewControllers
    for controller in array! {
        controller.tabBarItem.imageInsets = UIEdgeInsets(top: 5, left: 0, bottom: -5, right: 0)
    }
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.