9

Tôi gặp sự cố với hiển thị cửa sổ bật lên của mình. Sau initWithContentViewController:presentPopoverFromBarButtonItem:permittedArrowDirections:animated:, nó sẽ cắt các góc của thanh điều hướng. Làm thế nào tôi nên sửa nó? Cảm ơn.Đường dẫn UIPopoverController và UINavigationController cắt các góc

Clipping corners of navigation bar

Đây là mã Tôi đang sử dụng

NavContr *nav = [NavContr new]; 
    nav.navigationBar.backgroundColor = [UIColor redColor]; 
    UIPopoverController *tempPop = [[UIPopoverController alloc] initWithContentViewController:nav]; 
    [tempPop presentPopoverFromBarButtonItem:mainButtonItem permittedArrowDirections:UIPopoverArrowDirectionUp animated:NO]; 

EDIT: Tôi đã giải quyết vấn đề này:

+ (void)configure:(UINavigationController *)navController { 
    UINavigationBar *navigationBar = navController.navigationBar;  
    UIView *contentView = nil; 

    for (UIView *view in navController.view.subviews) { 
     if ([[NSString stringWithFormat:@"%@", [view class]] isEqualToString:@"UILayoutContainerView"]) 
      contentView = view; 
    } 

    // setting frame to navigation bar and content view 
    [navigationBar setFrame:CGRectMake(navigationBar.frame.origin.x, 0, navigationBar.frame.size.width, navigationBar.frame.size.height)]; 
    [contentView setFrame:CGRectMake(contentView.frame.origin.x, 0, contentView.frame.size.width, contentView.frame.size.height + navigationBar.frame.size.height)]; 

    [navController.view bringSubviewToFront:contentView]; 

    for (UIView *customView in contentView.subviews) 
     customView.frame = CGRectMake(customView.frame.origin.x, customView.frame.origin.y + navigationBar.frame.size.height, customView.frame.size.width, customView.frame.size.height); 

    [contentView addSubview:navigationBar]; 
    [contentView bringSubviewToFront:navigationBar]; 
} 
+0

Vui lòng tạo mã đầy đủ tạo UIPopoverController – Injectios

+0

Thử thêm một số chế độ xemBộ điều khiển vào bộ điều hướng nav – Injectios

+0

Bạn không thể thay đổi chức năng này. Có thể có một số phương tiện không có giấy tờ để làm điều đó, nhưng có một cơ hội công bằng mà triển khai nó có thể khiến ứng dụng của bạn từ chối bởi Apple. – RLH

Trả lời

10

Điều này có thể là do bạn không có bộ điều khiển chế độ xem gốc hoặc không phù hợp với bộ điều khiển điều hướng theo cách không được chơi. Đây là cách bạn nên được thiết lập popover:

MyCustomViewController *viewController = [[UIViewController alloc] initWithNibName:@"MyCustomViewController" bundle:nil]; //or storyboard or whatever 
UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:viewController]; //you should have a root view controller before displaying the popover 
tintColor = [UIColor redColor]; 
UIPopoverController *tempPop = [[UIPopoverController alloc] initWithContentViewController:nav]; 
[tempPop presentPopoverFromBarButtonItem:mainButtonItem permittedArrowDirections:UIPopoverArrowDirectionUp animated:NO]; 

Có một vài điều rất quan trọng xảy ra ở đây:

  • điều khiển chuyển hướng của bạn nên có một bộ điều khiển xem gốc trước khi bạn hiển thị nó.
  • Mã này đang sử dụng phiên bản tiêu chuẩn UINavigationController. Theo số documentation, bạn không nên phân loại UINavigationController, bạn cũng không nên thử và phát minh lại bánh xe. Apple đã tạo ra một khuôn khổ phức tạp và toàn diện, UIKit, mà bạn có thể sử dụng để xây dựng các ứng dụng tuyệt vời. Nếu bạn cố gắng và bước ra ngoài hộp, bạn sẽ tạo ra rất nhiều công việc cho bản thân mà không có bất kỳ lợi ích đáng kể nào.
  • Điều này đang sử dụng thuộc tính tintColor của lớp UINavigationBar. Nếu màu không đủ cho giao diện người dùng của bạn, bạn cũng có thể đặt hình nền theo cách thủ công (tham khảo docs).

Nếu bạn muốn tạo một cửa sổ bật lên có bộ điều khiển điều hướng, hãy sử dụng lớp được xây dựng trong UINavigationController. Đừng phân loại nó và không tái tạo lại nó. Để tùy chỉnh giao diện của navigationBar, hãy sử dụng phương thức UI_APPEARANCE_SELECTOR trong lớp UINavigationBar.

0

enter image description here

Tôi đã thử & tái tạo vấn đề bạn đang phải đối mặt, thực hiện một số R & D. Đó là do các dòng mã dưới đây:

nav.navigationBar.backgroundColor = [UIColor redColor]; 

Trong khi bạn thiết lập màu nền của thanh điều hướng nó sẽ cư xử kỳ lạ do hình dạng tự nhiên của bật lên. Hãy thử và loại bỏ các dòng dưới đây, bạn chắc chắn sẽ có vấn đề giải quyết.

+0

Tôi đã UINavigationController – LightNight

0

Nếu bạn chỉ định Rect nơi cửa sổ bật lên xuất hiện, chúng tôi nhận thấy rằng việc sử dụng số thập phân có thể dẫn đến biến dạng lạ như vậy. Hãy chắc chắn rằng bạn đang sử dụng số nguyên cho nguồn gốc và kích thước.

3

tôi nhận được các giải pháp trước khi thêm CALayer các UIPopOverController thấy như rounded
sau khi thêm bên dưới dòng trong class view bảng tôi nhận được UIPopOverController sau

#import <QuartzCore/QuartzCore.h> 

CALayer *imageLayer2 = self.tableView.layer; 
[imageLayer2 setCornerRadius:-20]; 
[imageLayer2 setBorderWidth:1]; 

non rounded

Hãy thử nó trong dự án của bạn có thể nó hoạt động !!
Thanx

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