0

我正在使用 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];
    ...
4

1 回答 1

1

这是一个奇怪的错误。我不确定这是否是 iCarousel 的问题,或者只是在从视图层次结构中动态添加和删除 UITextViews 时需要处理的 iOS 的一个怪癖。

我有一个可能比您找到的解决方案更清洁的解决方案;只需将其添加到您的 MICardView:

- (void)didMoveToSuperview
{
    if (self.superview)
    {
        _textView.frame = self.bounds;
    }
}

这基本上会强制 textView 在每次 cardView 被回收时重新布局,并且它避免了您必须在视图控制器中执行任何特殊操作来解决该问题。

于 2012-10-26T09:16:35.060 回答