19

में इसके अंदर नेविगेशनबार और UIBarButtonItem तत्वों की ऊंचाई बदलें, मुझे लगता है कि यह ऐप्पल दिशानिर्देशों के साथ सख्ती से नहीं है लेकिन मुझे लगता है कि यह किसी भी तरह से संभव होना चाहिए। मैं UINavigationController के अंदर नेविगेशन बार की ऊंचाई और उस बार के अंदर UIBarButtonItem तत्वों की ऊंचाई को बदलना चाहता हूं।कोको टच

this question से एक चाल का उपयोग करके मैंने नेविगेशन बार की ऊंचाई को बदलने में कामयाब रहा लेकिन मैं बार बटन आइटम की ऊंचाई समायोजित करने का कोई तरीका नहीं देख सकता।

यदि कोई जानता है कि बार बटन आइटम के आकार को कैसे बदला जाए, तो कृपया मेरी मदद करें।

+0

यह नहीं शायद आसान सिर्फ अपने स्वयं के कस्टम नेविगेशन पट्टी और संबद्ध बार बनाने के लिए है है आइटम? अधिक जानकारी के लिए इस लिंक पर मेरा उत्तर देखें: http://stackoverflow.com/questions/6398869/how-to-assign-my-customnavigationbar-to-a-uinavigationcontroller/6398891#6398891 – Luke

उत्तर

16

हो सकता है कि एक स्वनिर्धारित नेवबार के बारे में इस ट्यूटोरियल तुम्हारी मदद करेगा: Recreating the iBooks wood themed navigation bar

आप एक UIImageView के साथ एक BarButtonItem बनाते हैं तो आपके शायद के लिए कस्टम UIImageView के framesize/boundsize बदल सकते हैं

UIImageView* imageView = [[[UIImageView alloc] initWithFrame:navigationController.navigationBar.frame] autorelease]; 
imageView.contentMode = UIViewContentModeLeft; 
imageView.image = [UIImage imageNamed:@"NavBar-iPhone.png"]; 
[navigationController.navigationBar insertSubview:imageView atIndex:0]; 

तो अपने आपको -initWithFrame विधि उचित मूल्यों की आवश्यकता होगी।

+0

+1; mgamer निश्चित रूप से एक कस्टम छवि का उपयोग करने की आवश्यकता होगी या यहां देखें। मानक बटन आइटम में एक परिवर्तनीय ऊंचाई नहीं है। –

3

मैं UINavigationBar उपclassing और -layoutSubviews ओवरराइडिंग के समान कुछ करने में कामयाब रहा। कोड लगता है:

-(void)layoutSubviews { 
    [super layoutSubviews]; 
    int i = 0; 
    for (UIView *view in self.subviews) { 
     NSLog(@"%i. %@", i++, [view description]); 
     if ([view isKindOfClass:NSClassFromString(@"UINavigationButton")]) { 
      view.frame = CGRectMake(0, 0, 100, 50); 
     } 
    } 
} 

आप को पता है UINavigationBar उपवर्ग के लिए कैसे की जरूरत है, this very good answer पर एक नजर है।

मैं वास्तव में एनएससीएलएएसफ़्रोस्ट्रिंग (@ "यूनाविगेशन बटन") भाग के बारे में निश्चित नहीं हूं। यह काम करता है, लेकिन मैंने इसे एक प्रयोग के रूप में किया, और मुझे यकीन नहीं है कि यह ऐप्पल द्वारा अनुमोदित होगा या नहीं। मुझे उम्मीद है कि बेहतर ज्ञान वाले किसी व्यक्ति को कुछ प्रकाश डाला जा सकता है।

3

UINavigationBar

iOS SDK 4.3 में और उससे आगे के लिए, वहाँ एक रास्ता (हैक) UINavigationBar की ऊंचाई बदलने के लिए है।

UINavigationController की ऊंचाई बदलने के लिए, viewWillAppear:animated: फ़ंक्शन में अपना फ्रेम आकार बदलें। फिर, ऊंचाई पूरे ऐप में अनुकूलित रहेंगे।

UIBarButtonItems
मैं वास्तव में दौड़े हैं इस में अपने आप को और केवल एक चीज मैं initWithCustomView का लाभ दिया गया था और एक परिभाषित फ्रेम के साथ एक UIButton में गुजर के साथ आ सकता है के लिए

UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom]; 

/* 
* Insert button styling 
*/ 

button.frame = CGRectMake(0, 0, width, height); 

UIBarButtonItem *barButtonItem = [[UIBarButtonItem alloc] initWithCustomView:button]; 

अन्यथा UIBarButtonItem केवल एक चौड़ाई संपत्ति ऊंचाई संपत्ति सेट किया जा सकता है कि लेकिन दुर्भाग्य से नहीं है। InitWithCustomView के साथ मैंने एक और निफ्टी चीज एक बटनबार और गतिविधि संकेतकों जैसी अन्य चीज़ों के साथ एक टूलबार में पास करना है। उम्मीद है की यह मदद करेगा।

2

आप इसे कितनी बुरी तरह से चाहते हैं? और, आप कितनी पतली (या मोटी) अपनी नौसेना बनाना चाहते हैं?

एक दृष्टिकोण नाबाबार के परिवर्तन को स्केल करने और अनुवाद करने के लिए सेट करना होगा। यदि आप इसे बहुत अधिक स्केल करते हैं तो शीर्षक और बटन टेक्स्ट विजयी दिखेंगे, लेकिन अगर आपको केवल कुछ पिक्सेल शेव करने की आवश्यकता है तो आप ठीक हो सकते हैं।

enter image description here

और कोड है कि इस उत्पादन:

यहाँ पूरी ऊंचाई (33 पिक्सल लंबा) के 75% होने के लिए यह स्केलिंग का परिणाम है

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    self.navigationItem.title = @"Thin Navigation Bar"; 

    self.navigationItem.rightBarButtonItem = [[[UIBarButtonItem alloc] initWithTitle: @"Press Me" style:UIBarButtonItemStyleBordered target: nil action: NULL ] autorelease]; 

    CGFloat scale = .75; 
    CGFloat cy = 44.0 - (44.0 * scale); 

    self.navigationController.navigationBar.transform = CGAffineTransformScale(CGAffineTransformMakeTranslation(0, -cy/2.0), 1.0, scale) ; 
} 

- (void)viewDidAppear:(BOOL)animated 
{ 
    [super viewDidAppear:animated]; 

    CGFloat scale = .75; 
    CGFloat cy = 44.0 - (44.0 * scale); 

    CGRect r = self.view.frame; 
    r.origin.y -= cy; 
    r.size.height += cy; 
    self.view.frame = r; 
} 

अब, यह करता है कई समस्याएं हैं, जो हल हो सकती हैं या नहीं भी हो सकती हैं। # 1 यह है कि आप UINavigationController के साथ Navbar और दृश्य-नियंत्रक दृश्यों को आकार देने और स्थिति के लिए लड़ रहे हैं। इस तकनीक का उपयोग करने वाले दृश्य नियंत्रकों के बीच एनिमेटिंग शायद अजीब दिखने जा रही है।

मैं उत्सुक अगर आप से संबंधित मुद्दों का समाधान कर सकता हो जाएगा ...

एक आखिरी सोचा: यदि आप एक UINavigationController का उपयोग तो वहाँ वास्तव में squished पाठ की तुलना में इस दूसरे के साथ मुद्दों की एक पूरी बहुत कुछ नहीं कर रहे हैं न तो । या, आप एक नेविगेशन नियंत्रक का उपयोग कर सकते हैं लेकिन डिफ़ॉल्ट navbar छुपाएं, और अपने प्रत्येक बच्चे-दृश्य नियंत्रक दृश्यों में पतली navbar जोड़ें। तुम भी उपवर्ग UINavigationBar सकता है और भीतर से बदलने के लिए सेट:

@interface TSThinNavBar : UINavigationBar 
{ 
} 
@end 

@implementation TSThinNavBar 

// assuming we'll always be constructed from a nib 
- (id) initWithCoder:(NSCoder *)aDecoder 
{ 
    self = [super initWithCoder: aDecoder]; 
    if (self != nil) 
    { 
     CGFloat scale = .75; 
     CGFloat cy = 44.0 - (44.0 * scale); 

     self.transform = CGAffineTransformScale(CGAffineTransformMakeTranslation(0, -cy/2.0), 1.0, scale) ; 
    } 

    return self; 
} 

@end 
18

यह मेरा समाधान है। ये अच्छी तरह काम करता है।

@interface UINavigationBar (CustomHeight) 

@end 

@implementation UINavigationBar (CustomHeight) 

- (CGSize)sizeThatFits:(CGSize)size { 
    // Change navigation bar height. The height must be even, otherwise there will be a white line above the navigation bar. 
    CGSize newSize = CGSizeMake(self.frame.size.width, 40); 
    return newSize; 
} 

-(void)layoutSubviews { 
    [super layoutSubviews]; 

    // Make items on navigation bar vertically centered. 
    int i = 0; 
    for (UIView *view in self.subviews) { 
     NSLog(@"%i. %@", i, [view description]); 
     i++; 
     if (i == 0) 
      continue; 
     float centerY = self.bounds.size.height/2.0f; 
     CGPoint center = view.center; 
     center.y = centerY; 
     view.center = center; 
    } 
} 
+1

महान समाधान! – Oleg

+0

वास्तव में अच्छा +1 आपको बहुत बहुत धन्यवाद। – Sabobin

+2

मैं कभी नहीं 0 है, क्यों जांचें? – pfrank

4
static CGFloat const CustomNavigationBarHeight = 74; 


@implementation WTNavigationBar 



- (CGSize)sizeThatFits:(CGSize)size{ 
    size.width = 1024; 
    size.height = CustomNavigationBarHeight; 
    return size; 
} 

-(void)layoutSubviews { 
    [super layoutSubviews]; 
    for (UIView *view in self.subviews) { 
     SFLog(@"view.class=%@",[view class]); 
     if ([view isKindOfClass:NSClassFromString(@"UINavigationItemButtonView")]) { 
      float centerY = self.bounds.size.height/2.0f; 
      CGPoint center = view.center; 
      center.y = centerY; 
      view.center = center; 
     } 
    } 
} 


@end 
मेरी iPad ऐप्लिकेशन है, जो एक निश्चित भू-दृश्य अभिविन्यास है में

, मैंने पाया मैं आकार की चौड़ाई को हार्डकोड करने

संबंधित मुद्दे