【发布时间】:2014-12-17 02:38:58
【问题描述】:
XCode 5、Mac OS 10.9.4、iOS 7。
我正在做一个项目,该项目使用了很多进入滚动和表格视图的视图“单元”。每个“单元”视图都在单独的 .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 文件中都是关闭的。
每个视图的 .xib 文件都有一个“标准”布局,如下所示:
LTWItemView.xib - 自动布局关闭。
LTWItemView - 视图类本身。
LTWItemView 的子视图:“FrameRect” - 类“LTWDrawFrameView”的视图(这是一个普通视图,但 drawRect 被覆盖以在视图周围绘制一个框架)。
“FrameRect”视图的子视图,其他视图UILabels、UIImageView、UIButton等
问题是“FrameRect”中的drawRect方法没有被调用,它的背景颜色也没有被设置。当我第一次创建这个视图时,我错误地启用了自动布局,在这种情况下,背景颜色设置正确并调用了 drawRect。我已经验证了这一点。
问题是,如果我启用自动布局,它会导致其他地方出现问题,并且转换项目以使用它的工作量太大。
此外,在一些“FrameRect”视图中,还有其他更小的 LTWDrawFrameView,它们绘制它们的框架并设置它们的背景颜色。似乎它不适用于从笔尖加载的视图中的第一个子视图。
任何关于如何解决这个问题的想法将不胜感激。
我通过在 .xib 文件中添加“虚拟”视图作为单元格视图的第一个子视图并将“FrameRect”(及其所有子视图)放入该视图中来解决该问题。这似乎工作正常并解决了我的直接问题,但我很想知道是否有更好的解决方法。
【问题讨论】:
标签: ios objective-c xcode autolayout