我有一个非常简单的 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];
更新
我的 View 层次结构:UIViewController View->Custom UILabel->MyView
这是一个错误消息气泡,我的 View 是一个指向某物的喙。
我使用了一个新的 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
[constraints framework] 或 iOS8 更改为 UILabel
),但解决方案是更改 View 层次结构。我创建了另一个包含 UILabel
和我的 UIView
(绘制的喙)的 UIView
而不是将 UIView
添加到 UILabel
作为 subview 。现在 drawRect
方法在 iOS7 和 iOS8 上都被调用。
先前的层次结构:
UIViewController View ->自定义 UILabel->MyView
新层次结构:
UIViewController View->Container UIView->Custom UILabel & MyView
综上所述,如果你的 drawRect
方法在 iOS8 上没有被调用,并且你正在添加一些 UIView
到 UILabel
作为 subview ,试试使用一些包含 UIView
和 UILabel
的容器。
关于iOS8 问题 - 未调用 UIView drawRect,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26038336/