2017-09-26 69 views
0

我剛更新我的設備到iOS來測試我的應用程序,準備iOS 11。我有一個工具欄在頂部,不再有按鈕工作 - 圖像在iOS 10中工作正常和下面。UIBarButtonItem不再顯示在iOS 11中

下面是如何初始化圖片:

@property (strong, nonatomic) IBOutlet UIToolbar *navBar; 
@property (strong, nonatomic) IBOutlet UIBarButtonItem *refreshButton; 

    path = [NSString stringWithFormat: @"https://s3.amazonaws.com/myapp/images/refresh.png"]; 
    url = [NSURL URLWithString:path]; 
    data = [NSData dataWithContentsOfURL:url]; 
    refreshButton = [[UIImage alloc] initWithData:data]; 

    smallerButton = [TRUtils imageWithImage:refreshButton scaledToSize:CGSizeMake(20, 20)]; 

    //TODO: Check image exists 
    self.refreshButton = [[UIBarButtonItem alloc] initWithImage:[smallerButton imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal] 
                 style:UIBarButtonItemStylePlain 
                 target:self 
                 action: @selector(refreshButtonPushed:)]; 
    [self.refreshButton setTarget:self]; 
    self.refreshButton.enabled = YES; 
    self.refreshButton.imageInsets = UIEdgeInsetsMake(32, 32, 32, 32); 

然後,我將它們添加到導航欄的位置:

self.navBar.items = [NSArray arrayWithObjects:self.backButton, self.forwardButton, self.flex, self.toolbarTitle, self.flex, self.refreshButton, self.flex, self.homeButton, nil]; 

任何想法,爲什麼這些圖像將停止顯示iOS的11,但顯示只是罰款iOS 10?

它看起來像按鈕仍然「工作」,但他們只是空白,所以人們不知道他們可用。

看起來好像this SO有一個解決方案來解決它。但是,當我設置:

self.navigationController.interactivePopGestureRecognizer.delegate = self; 

- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer { 
    if ([self.navigationController respondsToSelector:@selector(interactivePopGestureRecognizer)] && 
     gestureRecognizer == self.navigationController.interactivePopGestureRecognizer) { 
     return NO; 
    } 
    return YES; 
} 

的問題仍然存在。

回答

1

您在UIBarButtonItem上設置的imageInsets是問題所在。擺脫它們,這應該讓圖標顯示在iOS 11上。考慮到圖像的大小和標籤欄的正常大小,那裏的值看起來似乎是假的。我的猜測是,iOS 10完全忽略了它們,但是iOS 11正在嘗試做「正確的事情」。

以下是一些基本的操場我用來驗證iOS上11的行爲的內容:

import UIKit 
import PlaygroundSupport 

extension UIImage { 

    func scaledImage(withSize size: CGSize) -> UIImage { 
     UIGraphicsBeginImageContextWithOptions(size, false, 0.0) 
     defer { UIGraphicsEndImageContext() } 
     draw(in: CGRect(x: 0.0, y: 0.0, width: size.width, height: size.height)) 
     return UIGraphicsGetImageFromCurrentImageContext()! 
    }  
} 

let navbar = UIToolbar(frame: CGRect(origin: .zero, size: CGSize(width: 320, height: 40))) 

let imageUrl = URL(string: "http://www.freeiconspng.com/uploads/black-refresh-icon-png-9.png")! 
let imageData = try Data(contentsOf: imageUrl) 
let image = UIImage(data: imageData)!.withRenderingMode(.alwaysOriginal).scaledImage(withSize: CGSize(width: 20, height: 20)) 

let shareButton = UIBarButtonItem(barButtonSystemItem: .action, target: nil, action: nil) 
let refreshButton = UIBarButtonItem(image: image, style: .plain, target: nil, action: nil) 

// Uncomment the line below to reproduce the issue on iOS 11 
//refreshButton.imageInsets = UIEdgeInsets(top: 32, left: 32, bottom: 32, right: 32) 

navbar.items = [shareButton, refreshButton] 

PlaygroundPage.current.liveView = navbar