iOS8 问题 - 未调用 UIView drawRect

标签 ios objective-c iphone uiview ios8

我有一个非常简单的 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 上没有被调用,并且你正在添加一些 UIViewUILabel 作为 subview ,试试使用一些包含 UIViewUILabel 的容器。

关于iOS8 问题 - 未调用 UIView drawRect,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26038336/

相关文章:

iphone - 在本地 wi fi 网络中查询使用相同应用程序的其他设备

ios - 识别图像是否模糊(最好不用 OpenCV)

objective-c - 从 .plist 文件存储和获取 UIColor

ios - 如何使用 libRTMP.a 将 AMFObject 发送到服务器

objective-c - Xcode 4.3 停止构建 XIB 文件

ios - 在 Swift 中将闭包分配给变量会导致 'variable used before being initialized'

iphone - 获取核心数据对象的子对象的属性?

iphone - 如何隐藏组 TableView 中自定义单元格的 UITableViewCell 边框?

iphone - 编写适用于 iOS 和 Mac OS 的类

iOS 通知 : callbacks not called