Вы помещаете веб-представления в UITableView
? Вы действительно не можете этого сделать; они будут сражаться друг с другом (и это явно задокументировано как не поддерживаемое).
Существует два основных решения: перепроектировать эту часть программы как веб-приложение или макет с помощью Core Text. Выполнение всей работы за один UIWebView
намного быстрее, но требует перехода между JavaScript и Objective-C, который сложно разрабатывать и отлаживать. Если вы пойдете по этому пути, я обычно рекомендую вам создать часть JavaScript как «мини-приложение», которое можно разрабатывать и отлаживать в Safari, а затем вставлять в него.
Для простого макета Core Text не слишком сложен. Если вы создаете CFAttributedString
, вот все, что вам нужно, чтобы нарисовать очень простую рамку:
- (id)initWithFrame:(CGRect)frame {
if ((self = [super initWithFrame:frame])) {
CGAffineTransform
transform = CGAffineTransformMakeScale(1, -1);
CGAffineTransformTranslate(transform,
0,
-self.bounds.size.height);
self.transform = transform;
self.backgroundColor = [UIColor whiteColor];
}
return self;
}
- (void)drawRect:(CGRect)rect {
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetTextMatrix(context, CGAffineTransformIdentity);
CGPathRef path = CGPathCreateWithRect(self.bounds, NULL);
CFAttributedStringRef
attrString = (__bridge CFTypeRef)self.attributedString;
// Create the framesetter using the attributed string
CTFramesetterRef framesetter = CTFramesetterCreateWithAttributedString(attrString);
// Create a single frame using the entire string (CFRange(0,0))
// that fits inside of path.
CTFrameRef
frame = CTFramesetterCreateFrame(framesetter,
CFRangeMake(0, 0),
path,
NULL);
// Draw the frame into the current context
CTFrameDraw(frame, context);
CFRelease(frame);
CFRelease(framesetter);
CGPathRelease(path);
}
И требуемый плагин: Да, моя книга будет содержать более 20 страниц по всем видам причудливого текстового макета, в основном с использованием Core Text (только что завершил эту главу сегодня). Но для простых вещей достаточно вышеперечисленного, если вам не нужно вырезать и вставлять.