我有一个非常简单的UIView,它只绘制一个三角形.它实现了一个绘制图形的UIView drawRect方法.它在iOS7上工作正常,但是当我在iOS8上运行相同的代码时,它甚至都没有被调用.任何想法在iOS8上发生了什么变化?我的代码简而言之:
@interface MyView : UIView
@end
@implementation MyView
- (instancetype)init {
self = [super init];
if (self) {
self.backgroundColor = [UIColor clearColor];
}
return self;
}
- (void)drawRect:(CGRect)rect {
// draw things
}
@end
myView = [MyView new];
[self addSubview:myView];
更新
我的视图层次结构:UIViewController视图 – >自定义UILabel-> MyView
这是一个错误消息泡沫,我的观点是一个指向某事的喙.
我使用了一个新的UI调试工具,但在那里看不到它.调用Init方法,而drawRect则不调用. iOS8中的某些内容必须已更改,因为iOS7正在调用drawRect.
更新2
当然我正在使用约束(和Masonry pod),这就是为什么我没有指定框架.
[myView mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.equalTo(make.superview.mas_bottom);
make.centerX.equalTo(make.superview);
make.width.equalTo(@10.0f);
make.height.equalTo(@5.0f);
}];
我也尝试在各个地方添加[myView setNeedsDisplay],但它没有帮助.
最佳答案 问题终于解决了.我不确定究竟是什么导致了这个问题(Masonry [约束框架]或iOS8更改为UILabel),但解决方案是更改视图层次结构.我创建了另一个包含UILabel和我的UIView(绘制的喙)的UIView,而不是将UIView添加到UILabel作为子视图.现在,在iOS7和iOS8上都调用了drawRect方法.
上一层次:
UIViewController查看 – >自定义UILabel-> MyView
新层次结构:
UIViewController View-> Container UIView-> Custom UILabel&我的看法
总而言之,如果你的drawRect方法没有在iOS8上调用,并且你将一些UIView添加到UILabel作为子视图,请尝试使用一些包含UIView和UILabel的容器.