ios - 如果启用了自动布局,则不会调用 drawRect

标签 ios objective-c xcode autolayout

XCode 5、Mac OS 10.9.4、iOS 7。

我正在从事一个项目,该项目使用大量进入滚动和表格 View 的 View “单元格”。每个“单元格” View 都在单独的 .xib 文件中,并像这样加载:

+(instancetype) newViewOfKind:(NSString*) theViewKind withItemInfo:(LTWItemInfo*) theItemInfo
{
NSString*   myClassName;
LTWItemView*    myNewCell;

myClassName = NSStringFromClass([self class]);
myNewCell = [[super class] newViewOfKind:theViewKind withItemInfo:theItemInfo andNIBBaseName:myClassName];

if (myNewCell.pItemActivityIndicator != nil)
    myNewCell.pItemActivityIndicator.hidesWhenStopped = YES;

myNewCell.pItemDownloadImageLoadedFlag = NO;
myNewCell.pItemDownloadImage = nil;
[myNewCell setItemInfo:theItemInfo];

return myNewCell;
}

这很好用,并在应用程序的很多地方使用。

这个项目是在自动布局出现之前发起的,它在所有单元格 .xib 文件中都是关闭的。

每个 View 的 .xib 文件都有一个“标准”布局,如​​下所示:

LTWItemView.xib — 自动布局关闭。

LTWItemView - View 类本身。

LTWItemView 的 subview :“FrameRect” - 类“LTWDrawFrameView”的 View (这是一个普通 View ,但 drawRect 被覆盖以在 View 周围绘制框架)。

“FrameRect” View 的 subview ,其他 View UILabels、UIImageView、UIButton 等。

问题是“FrameRect”中的 drawRect 方法没有被调用,它的背景颜色也没有设置。当我第一次创建这个 View 时,我错误地启用了自动布局,在这种情况下,背景颜色设置正常并调用了 drawRect。我已经验证了这一点。

问题是,如果我启用自动布局,它会在其他地方引起问题,而且转换项目以使用它的工作量太大。

此外,在一些“FrameRect” View 中,还有其他更小的 LTWDrawFrameView,它们可以绘制框架并设置背景颜色。它似乎不适用于从 Nib 加载的 View 中的第一个 subview 。

任何有关如何解决此问题的想法都将不胜感激。


我通过在 .xib 文件中添加一个“虚拟” View 作为 Cell View 的第一个 subview 并将“FrameRect”(及其所有 subview )放入该 View 中来解决这个问题。这似乎工作正常并解决了我眼前的问题,但我很想知道是否有更好的解决方法。

最佳答案

我不完全明白你的问题,但通常需要经常调用其​​ drawRectFunction 的 View 应该将其 contentMode 设置为 UIViewContentModeRedraw

yourView.contentMode = UIViewContentModeRedraw;

关于ios - 如果启用了自动布局,则不会调用 drawRect,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25043447/

相关文章:

ios - 将相同的 UIBarButtonItem 添加到几个 UIViewControllers

ios - 如何将从 ftp URL 检索的数据转换为 Swift 中可用的对象

objective-c - Zbar SDK 在 iOS6 中不工作

swift - 如何调试 Swift 的函数调用堆栈?

ios - swift : How do I pass the same text and image form tableVC to a detailVC using the same tableviewcell?

iphone - 在 Cocos 3d 中动态加载 3d 对象

ios - 如何让多个音频流在 iOS 中重叠播放?

ios - Amazon SNS 移动推送 - 如何批量订阅一个主题的端点?

ios - 确定从 iPhone 中的 URL 检索 JSON 的问题

iphone - 如何在 MPMovieplayercontroller 中将视频旋转 90º