चल UITabBarItem छवि नीचे?


98

आम तौर पर आपके प्रत्येक टैब UITabBarपर एक छोटी छवि होती है और एक शीर्षक टैब होता है। शीर्षक नीचे समायोजित करने के लिए छवि टैब के शीर्ष पर स्थित / केंद्रित है। मेरा सवाल यह है: यदि आप एक टैबबार रखना चाहते हैं तो सिर्फ एक छवि है और कोई शीर्षक नहीं है, जिससे छवि को नीचे ले जाने का एक तरीका है ताकि यह टैब के भीतर बेहतर हो?

मैं वर्तमान में उपयोग कर रहा हूं (नीचे देखें):

[tabBarItem setFinishedSelectedImage:tabSelected withFinishedUnselectedImage:tabUnselected];

लेकिन इस समय बिना शीर्षक वाली बड़ी छवि का उपयोग करना पसंद करेंगे, अगर मैं छवि को लगभग 70pixels @ 2x से बड़ा बनाता हूं तो यह UITabBarनीचे की तरफ बहुत से अप्रयुक्त स्थान को छोड़ते हुए ऊपर से किनारा करना शुरू कर देता है ।

जवाबों:


179

(आइकन छवि को आगे बढ़ाने के लिए tabBarItem) समायोजित करने का प्रयास करें imageInsetsऔर नियंत्रक शीर्षक को शून्य पर सेट करें (ताकि कोई शीर्षक प्रदर्शित न हो)। कंट्रोलर को देखने के लिए कुछ इस तरह -initया -viewDidLoadविधि से रखें :

उद्देश्य सी

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
@ लुकास: लेकिन यह छवियों को सिकोड़ता है।
सौरभ भारद्वाज

1
@Sourabh मेरे लिए उन्हें छोटा नहीं करता
टाइगरकोडिंग

7
अगर आपको पिक्सेल परफेक्ट होने की आवश्यकता है तो वास्तविक इनसेट वैल्यू 5.5f है।
उपयोगकर्ता

1
@ rr1g0 बैज को कस्टम स्थिति में ले जाना संभव नहीं है। यदि आपको बैज या कस्टम बैज उपस्थिति की कस्टम स्थिति की आवश्यकता है, तो आपको इसे स्वयं लागू करना होगा
लुकास कुकके

1
@ सौरभ आपको छवि को सिकोड़ने के लिए एक नकारात्मक मूल्य के साथ तल को ऑफसेट करना होगा।
रमलमोइ

150

आप इसे स्टोरीबोर्ड के माध्यम से भी कर सकते हैं। अपने टैबबारिटम का चयन करें, आकार निरीक्षक के पास जाएं और उपयुक्त इनसेट असाइन करें।

यहां छवि विवरण दर्ज करें

* Xcode पर प्रदर्शित, संस्करण 7.3.1 (7D1014)


अच्छा और साफ!
केन

सभी जवाबों के लिए सर्वश्रेष्ठ ... बहुत बहुत धन्यवाद @ नील गालिसैकोव
वेंकटेश चजरला

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 Gu

उपवर्ग न करें, इसके बजाय इसे अपने ऐपडेलगेट में डाल दें
लासज़लो

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

स्विफ्ट 3.0

आप इमेज लैन्ससेट सेट कर सकते हैं, डेसिंग के अनुसार टॉप, लेफ्ट, बॉटम और राइट सेट कर सकते हैं।

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)])मेरे लिए चाल चली।
इमैनुएल पेरिस

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)
    }
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.