Di chuyển Hình ảnh UITabBarItem xuống dưới?


98

Thông thường trên mỗi tab của UITabBarbạn có một hình ảnh nhỏ và tiêu đề đặt tên cho tab. Hình ảnh được đặt / căn giữa về phía trên cùng của tab để chứa tiêu đề bên dưới. Câu hỏi của tôi là: nếu bạn muốn có tab Thanh chỉ với một hình ảnh và không có tiêu đề, có cách nào để di chuyển hình ảnh xuống để nó căn giữa tốt hơn trong tab không?

Tôi đang sử dụng (xem bên dưới) hiện tại:

[tabBarItem setFinishedSelectedImage:tabSelected withFinishedUnselectedImage:tabUnselected];

nhưng tôi muốn sử dụng hình ảnh lớn hơn mà không có tiêu đề, tại thời điểm này nếu tôi làm cho hình ảnh lớn hơn khoảng 70pixels @ 2x, nó sẽ bắt đầu tràn ra khỏi đầu UITabBartrong khi để lại rất nhiều không gian chưa sử dụng ở dưới cùng.

Câu trả lời:


178

Hãy thử điều chỉnh tabBarItem's imageInsets(đối với di chuyển các hình ảnh biểu tượng) và thiết lập các tiêu đề bộ điều khiển để nil (vì vậy không có tựa đề sẽ được hiển thị). Đặt một cái gì đó như thế này vào -inithoặc -viewDidLoadphương thức trong bộ điều khiển chế độ xem:

Objective-C

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

Nhanh

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

UITabBarItemlà một lớp con UIBarItemcó thuộc UIEdgeInsets imageInsetstính. Chơi một chút với các trang bị cho đến khi nó trông đẹp (tùy thuộc vào hình ảnh biểu tượng thanh tab của bạn)


3
@Lukas: nhưng điều này thu nhỏ hình ảnh.
Sourabh Bhardwaj

1
@Sourabh Không thu nhỏ chúng lại cho tôi
TigerCoding

7
Giá trị cài đặt thực tế là 5,5f nếu bạn cần nó là pixel hoàn hảo.
người dùng

1
@ rr1g0 Không thể di chuyển huy hiệu sang vị trí tùy chỉnh. Nếu bạn cần vị trí tùy chỉnh của một diện mạo huy hiệu hoặc tùy chỉnh huy hiệu, bạn phải thực hiện nó cho mình
Lukas Kukacka

1
@Sourabh bạn phải bù phần dưới bằng giá trị âm để không bị thu nhỏ hình ảnh.
Rmalmoe

150

Bạn cũng có thể làm điều đó thông qua bảng phân cảnh. Chọn tabbaritem của bạn, đi tới trình kiểm tra kích thước và chỉ định các bộ thích hợp.

nhập mô tả hình ảnh ở đây

* Được chứng minh trên Xcode, Phiên bản 7.3.1 (7D1014)


Đẹp và sạch sẽ!
ken

Hay nhất của tất cả các câu trả lời ... Cảm ơn bạn rất nhiều @Neil Galiaskarov
Venkatesh Chejarla

49

Tạo một lớp con của UITabBarControllervà trong lớp đó 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);
    }];
}

Swift 3:

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

điều này đã làm việc cho tôi. Chỉ là cho nhanh chóng phương pháp enumerateObjectsUsingBlock không có sẵn nữa
Junchao Gu

không phân lớp, thay vào đó hãy đưa phần này vào AppDelegate của bạn
Laszlo

1
đưa đoạn mã này vào AppDelegatecũng hoạt động, nhưng rõ ràng nó không tốt hơn việc phân lớp nó. Tuy nhiên, bạn có thể có sở thích của riêng mình :)
Brian

10

Nếu bạn đang sử dụng Xamarin, điều này hoạt động:

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

10

Điều này đã làm việc cho tôi

Swift 4

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

2

SWIFT 3.0

Bạn có thể thiết lập bộ cài hình ảnh, đặt trên cùng, trái, dưới và phải theo mô tả.

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

2

Đối với iOS 11, bạn cần ghi đè phương thức TraitCollection ngoài việc thiết lập ImageInsets. Vui lòng thêm phương thức vào lớp UITabBarController phân lớp của bạn

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

Mẹo hay đã giúp tôi giải quyết một vấn đề liên quan đến vị trí hình ảnh cho mục thanh tab trên iPad và iOS 11. Nhưng quá khắc nghiệt để ghi đè bộ sưu tập đặc điểm ở cấp bộ điều khiển chế độ xem, tốt hơn là phân lớp con lớp UITabBar và ghi đè thuộc tính traitCollection ở đó. Ngoài ra, việc trả về một tập hợp đặc điểm chỉ với lớp ngang, sẽ làm mất các thuộc tính của tập hợp đặc điểm khác. return UITraitCollection(traitsFrom: [ super.traitCollection, UITraitCollection(horizontalSizeClass: .compact)])đã làm thủ thuật cho tôi.
Emmanuel Paris

1

Trong Swift 4.2 , UIEdgeInsetsMakeđược mô tả, thay vào đó chúng ta nên sử dụng UIEdgeInsets,

let array = tabBarController?.customizableViewControllers
    for controller in array! {
        controller.tabBarItem.imageInsets = UIEdgeInsets(top: 5, left: 0, bottom: -5, right: 0)
    }
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.