iOS8问题 – 未调用UIView drawRect

我有一个非常简单的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的容器.

点赞