7

Tôi đang làm việc trên một ứng dụng iPhone hoạt động ở cả hai hướng: chân dung và phong cảnh.iPhone: UINavigationBar bằng các nút - điều chỉnh chiều cao

Tôi đang sử dụng cho một chế độ xem và chế độ xem bảng được nhúng trong UINavigationController. Chiều cao của thanh điều hướng này với các nút của nó là: 44px portrait hoặc 34px landscape.

Trong một chế độ xem khác, tôi đã tự tạo UINavigationBar và tôi có thể đặt khung cho kích thước chính xác, nhưng UINavigationItem được nhúng với UIBarButtonItem không co lại. Vì vậy, đối với 34 px ở chế độ ngang, nút này là lớn và chồng lên thanh điều hướng ở độ cao.

Điều thú vị là mặc dù, điều này làm việc với mã giống hệt nhau trong các ứng dụng khác ... không có ý tưởng mà nó không phải là ở đây.

Có cách nào để điều chỉnh chiều cao/vị trí của UIBarButtonItem không?

Dưới đây là đoạn mã:

navBar = [[UINavigationBar alloc] initWithFrame: CGRectMake(0.0f, 0.0f, 320.0f, 34.0f)]; 
[navBar setBarStyle: UIBarStyleBlackOpaque]; 

[self addSubview: navBar]; 

barButton = [[UIBarButtonItem alloc] initWithTitle: NSLocalizedString(@"flip", @"flip") style:UIBarButtonItemStylePlain target:self action:@selector(flip)]; 

item = [[UINavigationItem alloc] initWithTitle: NSLocalizedString(@"Translation", @"Translation Tab Bar Title")]; 
[item setRightBarButtonItem: barButton]; 
[navBar pushNavigationItem:item animated:NO]; 

alt text http://labs.kiesl.eu/images/navbar.png

Cảm ơn

Tom

Trả lời

0

Tạo hình ảnh thay thế, và trong các phương pháp quan điểm điều khiển có thể xử lý hiệu ứng động luân chuyển, thay đổi hình ảnh trong các mục nút thanh. Hoặc bạn có thể sử dụng UIImageView làm chế độ xem tùy chỉnh trong mục của mình và đặt chế độ nội dung để giảm kích thước hình ảnh.

7

Tôi đã tìm ra: Chiều cao của thanh điều hướng phải là 32 px! Với 33 hoặc 34 px các đinh vít thẳng hàng lên.

+0

Rất hữu ích, cảm ơn. 32px là chìa khóa. Tôi đã sử dụng 34px và nó không hoạt động. – lambmj

4

Dưới đây là đoạn code tôi viết dựa trên câu trả lời của crashtesttommy:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { 
    return YES; 
} 

- (void) correctNavBarHeightForOrientation:(UIInterfaceOrientation)orientation { 
    // This is only needed in on the iPhone, since this is a universal app, check that first. 
    if ([UIDevice currentDevice].userInterfaceIdiom == UIUserInterfaceIdiomPhone){ 
     if (UIInterfaceOrientationIsLandscape(orientation)) { 
      self.navBar.frame = CGRectMake(self.navBar.frame.origin.x, self.navBar.frame.origin.y, self.navBar.frame.size.width, 32.0f); 
     } else { 
      self.navBar.frame = CGRectMake(self.navBar.frame.origin.x, self.navBar.frame.origin.y, self.navBar.frame.size.width, 44.0f); 
     } 
    } 
} 

- (void) viewWillAppear:(BOOL)animated { 
    [self correctNavBarHeightForOrientation:[UIApplication sharedApplication].statusBarOrientation]; 
} 

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration { 
    [self correctNavBarHeightForOrientation:toInterfaceOrientation]; 
} 
Các vấn đề liên quan