iOS8问题-未调用UIView drawRect

iOS8问题-未调用UIView drawRect,ios,objective-c,iphone,uiview,ios8,Ios,Objective C,Iphone,Uiview,Ios8,我有一个非常简单的ui视图,它只画了一个三角形。它实现了一个绘制图形的UIView drawRect方法。它在iOS7上运行良好,但是当我在iOS8上运行相同的代码时,它甚至没有被调用。你知道iOS8发生了什么变化吗?简而言之,我的代码是: @interface MyView : UIView @end @implementation MyView - (instancetype)init { self = [super init]; if (self) { s

我有一个非常简单的
ui视图
,它只画了一个三角形。它实现了一个绘制图形的
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
当然,我使用的是约束(和
massy
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]
,但没有任何帮助。

您的方法中缺少一个重要的细节。您需要指定一个确定视图原点和大小的框架。这可以通过
UIView
initWithRect
方法完成,也可以在分配/初始化后设置帧。由于您已经有了自定义的
init
方法,我将执行以下操作:

myView = [MyView new];
myView.frame = CGRectMake(0.0,0.0,100.0,100.0);
[self addSubview:myView];
这将绘制原点为(0.0,0.0)、宽度和高度为100.0的自定义视图

此外,如果仍有问题,添加对
setNeedsDisplay
的调用应强制调用
drawRect
方法:

[myView setNeedsDisplay];

确保
myView
的superview属性
cliptobunds=NO
,并且
myView
rect在屏幕上,问题最终得到解决。我不确定到底是什么导致了这个问题(
砌体
[constraints framework]或iOS8更改为
UILabel
),但解决方案是更改视图层次结构。我创建了另一个
UIView
,其中既包含
UILabel
又包含我的
UIView
(绘制的喙),而不是将
UIView
添加到
UILabel
子视图中。现在,在iOS7和iOS8上都调用了
drawRect
方法

上一层次结构:
UIViewController视图->自定义UILabel->MyView

新的层次结构:
UIViewController视图->容器UIView->自定义UILabel和MyView


总之,如果您的
drawRect
方法在iOS8上没有被调用,并且您正在将一些
UIView
添加到
UILabel
作为子视图,请尝试使用包含
UIView
UILabel

关于如何在视图层次结构中引入视图的更多信息?您是否使用新的调试工具检查了视图层次结构,以找出您的视图在哪里?@Vinzzz更新了问题。如果你需要更多的信息,请告诉我。好的。。。所以你在用这个面具。。。也许iOS 8的bug来自于那个类?@Vinzzz这是可能的,但我用不同的方式修复了这个问题,请注意我的帖子。非常感谢你的帮助!谢谢你的回复。我当然在使用约束,所以我的代码中没有框架。对不起,忘了写这件事了。已更新问题。您可能希望尝试调用[self.view layoutSubviews],以确保正确处理和呈现约束。