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/