programing

UI 탭 표시줄 항목 이미지를 아래로 이동하시겠습니까?

bestprogram 2023. 6. 11. 11:06

UI 탭 표시줄 항목 이미지를 아래로 이동하시겠습니까?

일반적으로 의 각 탭에서UITabBar탭 이름을 지정하는 작은 이미지와 제목이 있습니다.이미지는 아래의 제목에 맞게 탭 상단을 향해 배치/중심을 맞춥니다.제 질문은 만약 당신이 이미지만 있고 제목이 없는 탭바를 갖고 싶다면, 이미지를 아래로 이동하여 탭 내에서 더 잘 중앙에 배치할 수 있는 방법이 없을까요?

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

[tabBarItem setFinishedSelectedImage:tabSelected withFinishedUnselectedImage:tabUnselected];

하지만 제목이 없는 더 큰 이미지를 사용하는 것을 선호합니다. 만약 제가 이미지를 약 70픽셀@2배 이상 크게 만든다면 그것은 상단에서 조금씩 떨어지기 시작합니다.UITabBar바닥에 사용하지 않은 공간을 많이 남겨두면서.

조정해 보십시오.tabBarItemimageInsets(아이콘 이미지 이동용) 및 컨트롤러 제목을 0으로 설정합니다(제목이 표시되지 않음).이와 같은 것을.-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소유물.모양이 좋을 때까지 삽입물을 약간 재생합니다(탭바 아이콘 이미지에 따라 다름).

iPad 관련 조정

iPad의 탭 표시줄 항목은 수평으로 분포합니다(아이콘과 레이블이 서로 옆에 있음).

아이콘과 레이블 사이의 공간을 조정하려면 수평으로 조정imageInsets수직적인 것 대신에.

스토리보드로도 할 수 있습니다.탭 표시줄 항목을 선택하고 크기 검사기로 이동한 다음 적절한 삽입을 할당합니다.

여기에 이미지 설명 입력

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

하위 클래스 만들기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)
}

이것은 나에게 효과가 있었습니다.

스위프트 4

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

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

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

SWIFT 3.0

디자인에 따라 이미지 lnset을 설정하고 상단, 좌측, 하단 및 우측을 설정할 수 있습니다.

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

iOS 11의 경우 이미지 설정과 별개로 특성 수집 방법을 재정의해야 합니다.삽입합니다. 하위 클래스의 UITabBarController 클래스에 메서드를 추가하십시오.

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

Swift 4.2에서는UIEdgeInsetsMake감소되었습니다. 대신에 우리는 사용해야 합니다.UIEdgeInsets,

let array = tabBarController?.customizableViewControllers
    for controller in array! {
        controller.tabBarItem.imageInsets = UIEdgeInsets(top: 5, left: 0, bottom: -5, right: 0)
    }

이것들은 저에게 효과가 없었습니다. 유일한 해결책은 이미지를 추가할 때 AlignmentRectInsets를 설정하는 것이었습니다.제 것은 다음과 같습니다.

let newsView = NewsViewController()
let newsIcon = UITabBarItem(title: nil, image: UIImage(systemName: "newspaper")?.withAlignmentRectInsets(UIEdgeInsets(top: 8.5, left: 0, bottom: -8.5, right: 0)), tag: 0)
newsView.tabBarItem = newsIcon
let viewControllers = [newsNavController]
self.viewControllers = viewControllers

2021년 오브젝티브-C

모든 방법을 시도해 보았지만 아무도 일하지 않았습니다.결국 저는 그것이 SF 심볼을 탭바 아이템 이미지로 사용했기 때문이라는 것을 알게 되었습니다.커스텀 이미지로 교체하면 문제가 해결됩니다.

    NSArray *tabItems = [self.tabBar items];
    // set tabItem icon, remove blue image with render mode set.
    UIImage *image1 = [[UIImage imageNamed:@"myIcon"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
    
    // set title offset
    [tabItems[0] setTitlePositionAdjustment:UIOffsetMake(0, 20)];
    [tabItems[1] setTitlePositionAdjustment:UIOffsetMake(-20, 20)];
    [tabItems[2] setTitlePositionAdjustment:UIOffsetMake(20, 20)];
    [tabItems[3] setTitlePositionAdjustment:UIOffsetMake(0, 20)];

    // set image offset
    [tabItems[0] setImageInsets:UIEdgeInsetsMake(0, 0, -30, 0)];
    ...

@2x의 경우 50x50px, @3x의 경우 75x75px의 경우 이미지 해상도를 사용합니다.

//On tabbar viewDidload
override func viewDidLoad() {
    super.viewDidLoad()
    self.delegate = self
    
    tabBar.items![0].imageInsets = UIEdgeInsets(top: 6, left: 0, bottom: -6, right: 0)
}

언급URL : https://stackoverflow.com/questions/16285205/moving-uitabbaritem-image-down