2012-01-04 35 views
14

Tôi đã tạo lớp con UINavigationBar của riêng mình để bật nền tùy chỉnh cao hơn 44px.UINavigationBar tùy chỉnh với chiều cao tùy chỉnh khiến cho UIBarButtonItem bị sai vị trí

tôi đã làm nó bằng cách ghi đè hai phương pháp:

-(void) drawRect:(CGRect)rect 
{ 
    [self.backgroundImage drawInRect:CGRectMake(0, 0, self.backgroundImage.size.width, self.backgroundImage.size.height)]; 
} 

- (CGSize)sizeThatFits:(CGSize)size 
{ 
    CGRect frame = [UIScreen mainScreen].applicationFrame; 
    CGSize newSize = CGSizeMake(frame.size.width , self.backgroundImage.size.height); 
    return newSize; 
} 

Và đây là kết quả:

Custom bar with custom height

Bây giờ, vấn đề của tôi là bạn có thể thấy là tất cả của UIBarButtonItem (và titleView) được đặt ở cuối thanh điều hướng.

Tôi muốn chúng được ghim vào đầu thanh (với một số đệm của khóa học). Tôi cần ghi đè điều gì để đạt được điều đó?

Cảm ơn!

EDIT:

Đây là giải pháp mà tôi đã sử dụng:

-(void) layoutSubviews 
{ 
    [super layoutSubviews]; 
    for (UIView *view in self.subviews) 
    { 
     CGRect frame = view.frame; 
     frame.origin.y = 5; 
     view.frame = frame; 
    } 
} 

Liệu các trick cho trạng thái nhàn rỗi, vẫn có một số hành vi kỳ lạ trên push và pop mục.

+0

làm thế nào bạn giải quyết vấn đề này? bạn có thể đăng bài không! – luca

+0

@luca - Giải pháp đã đăng –

+0

Bạn có bao giờ có thể giải quyết vấn đề push/pop không? – lti

Trả lời

6

Cố gắng ghi đè layoutSubviews: gọi [super layoutSubviews] bên trong và sau đó định vị lại các mục.

+0

Tôi đã cố gắng thành thật, và nó gần như hoạt động: Ở trạng thái không hoạt động, các nút được đặt đúng chỗ, nhưng trong khi hoạt ảnh đẩy và bật các mục điều hướng, vị trí bắt đầu cho tất cả các đối tượng động vẫn ở dưới cùng của Quán ba. Tôi thậm chí đã cố gắng ghi đè lên addSubview: nhưng nó không hoạt động. –

5

Để giải quyết vấn push/pop vấn đề setTitleVerticalPositionAdjustment sử dụng trong sizeThatFits: (CGSize) kích thước

- (CGSize)sizeThatFits:(CGSize)size { 
    UIImage *img = [UIImage imageNamed:@"navigation_background.png"]; 
    [self setTitleVerticalPositionAdjustment:-7 forBarMetrics:UIBarMetricsDefault]; 
    CGRect frame = [UIScreen mainScreen].applicationFrame; 
    CGSize newSize = CGSizeMake(frame.size.width , img.size.height); 
    return newSize; 
} 
+0

Thực sự tốt đẹp, cảm ơn cho "setTitleVerticalPositionAdjustment" -tip! – Mattias

Các vấn đề liên quan