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],以确保正确处理和呈现约束。