我正在使用iCarousel来显示可编辑的问题卡片。这些卡包含一个用于输入问题的UITextView(或者在您刷卡时已经包含文本)。但是,当呈现和滚动轮播时,有时文本视图显示为空。
这是因为UITextView优化不在屏幕外绘制文本。但是UITableView中的文本视图不会受此影响。
众所周知,由于优化,使用setNeedsDisplay不起作用,因此不会重绘文本。
我目前通过添加然后删除1px来更改文本视图的框架。这迫使重绘。但是,我只能在项目更改时执行此操作。 iCarousel没有willDisplayCell委托方法。 (尼克,你能轻易添加吗?代码让我感到困惑)
因为iCarousel正在预加载许多视图以获得平滑度(这是必要的,设置iCarouselOptionVisibleItems不会修复任何东西),似乎没有其他任何我可以做的但是知道视图是什么时候来到屏幕上。建议?
- (UIView *)carousel:(iCarousel *)carousel viewForItemAtIndex:(NSUInteger)index reusingView:(UIView *)view
{
MIQuestionView *questionView = (MIQuestionView *)view;
if (questionView == nil)
{
MIQuestionType type = [self.testSection.questionType integerValue];
questionView = [[MIQuestionView alloc] initWithFrame:CGRectNull questionType:type];
questionView.delegate = self;
}
questionView.question = [self.testSection.questions objectAtIndex:index];
return questionView;
}
文本视图嵌入在MIQuestionView中。文本在问题设置器中设置。我无法知道它什么时候进入屏幕。要清楚,我不想调整大小。屏幕上不会显示文本,并且在屏幕上显示为空白。
抱歉,我没有在上面查找含糊不清的代码:
- (id)initWithFrame:(CGRect)frame questionType:(MIQuestionType)type
{
if (CGRectEqualToRect(frame, CGRectNull))
frame = CGRectMake(0, 0, 650, 244);
self = [super initWithFrame:frame];
...
答案 0 :(得分:1)
这是一个奇怪的错误。我不确定在动态添加和删除视图层次结构中的UITextView时,您是否需要处理iCarousel或者只是一个iOS的怪癖。
我有一个解决方案,可能比你发现的解决方案更清洁;只需将其添加到您的MICardView:
- (void)didMoveToSuperview
{
if (self.superview)
{
_textView.frame = self.bounds;
}
}
这基本上强制textView在每次回收cardView时重新布局,并且它避免了你在视图控制器中做任何特殊事情来解决这个问题。