我使用here的解决方案使titleView clipsToBounds始终为真。
我在我的ViewController中有这个并且它运行良好,但是,如果我通过按后退按钮离开ViewController然后返回,它会在dispatch_async行崩溃。
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSKeyValueChangeKey,id> *)change context:(void *)context {
if([object isEqual:[[self.navigationController.navigationBar subviews] objectAtIndex:2]]) {
dispatch_async(dispatch_get_main_queue(), ^{
[[self.navigationController.navigationBar subviews] objectAtIndex:2].clipsToBounds = NO;
[self.navigationItem.titleView layoutIfNeeded];
});
}
}
编辑:
我得到的唯一错误是:Thread 1: EXC_BAD_ACCESS (code=1, address=0x102d8860)
控制台不提供(lldb)
答案 0 :(得分:2)
如果你从viewController出去,你必须removeObserver。
- (void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
[self.navigationController.navigationBar.subviews[2]
removeObserver:self
forKeyPath:@"clipsToBounds"];
}
答案 1 :(得分:0)
检查你的块
if (self.navigationController.navigationBar.subviews.count > 1){
…