【发布时间】:2014-02-05 18:02:52
【问题描述】:
我有一个方法可以创建一个titleView。
- (void) makeTitleView {
UIImage * image = [UIImage imageNamed:@"myImage"];
UIImageView * imageView = [[UIImageView alloc] initWithImage:image];
self.navigationItem.titleView = imageView;
}
在viewDidLoad 中调用时可以正常工作:
- (void)viewDidLoad
{
[self makeTitleView];
}
但是,如果在一小段延迟(小于pushViewController:animated: 动画时间)之后调用:
- (void)viewDidLoad
{
double delayInSeconds = 0.1;
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC));
dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
[self makeTitleView];
});
}
那么标题视图就给错了框架:
在动画结束时,帧会自行排序。
在 0.1 秒后设置标题似乎是人为的,但这种情况发生在我的一个应用程序上。 titleView 需要在网络请求之后设置,当结果来自缓存时,该网络请求在下一个运行循环之后返回。
我可以避免这个问题,但只是延迟更长的时间或调用viewDidAppear:中的方法,但两种解决方案都会引入不必要的延迟。有没有其他方法可以解决这个问题?
【问题讨论】:
标签: ios objective-c cocoa-touch uinavigationitem