編集: 以下の詳細な質問の簡略版: サブクラス化された drawRect を介して UIView の境界を更新しても、ビューの内容が引き伸ばされませんか?
私はニュース リーダー アプリケーションを構築しており、UIView を列に分割してコンテンツをページングする方法を検討しています。列の基本的なコーディングは完了していると思います (XML ノードのコンテンツを段落ごとに配列に分割し、段落を切り取らないように必要な合計領域を検出して解析します)。
私が抱えている問題は、内部のコンテンツが拡大されていないビューをサポートするのに十分な大きさであっても、テキストを拡大せずに ContentBounds を更新できないことです。
基本的にこれ:
contentBounds = CGSizeMake(self.bounds.size.width, self.bounds.size.height+COLUMN_YPOS);
[renderer updateContentBounds:contentBounds];
これを引き起こしている:(画像の下の完全なコード)
- (void)drawRect:(CGRect)rect
{
NSString *string = contentString;
[string stringByReplacingOccurrencesOfString:@"<br>" withString:@"\n\n"];
// column width
int COLUMN_WIDTH = self.bounds.size.width/2-40;
int COLUMN_HEIGHT = self.bounds.size.height-100;
int COLUMN_XPOS = 20;
int COLUMN_YPOS = 0;
int PAGE_HEIGHT = COLUMN_HEIGHT + 40;
CGSize maximumSize = CGSizeMake(COLUMN_WIDTH, COLUMN_HEIGHT-20);
NSArray *paragraphs = [string componentsSeparatedByString:@"\n"];
NSString *textBuffer = @"";
NSString *preBuffer = @"";
NSString *currentStringSegment;
for (int i=0; i<[paragraphs count]; i++) {
currentStringSegment = [paragraphs objectAtIndex:i];
preBuffer = textBuffer;
textBuffer = [textBuffer stringByAppendingString:@"\n\n"];
textBuffer = [textBuffer stringByAppendingString:currentStringSegment];
CGSize expectedSize = [textBuffer sizeWithFont:[UIFont fontWithName:@"Times New Roman" size:16] constrainedToSize:CGSizeMake(COLUMN_WIDTH, COLUMN_HEIGHT) lineBreakMode:NSLineBreakByWordWrapping];
if(expectedSize.height > maximumSize.height){
[preBuffer drawInRect:CGRectMake(COLUMN_XPOS, COLUMN_YPOS, COLUMN_WIDTH, COLUMN_HEIGHT) withFont:[UIFont fontWithName:@"Times New Roman" size:16] lineBreakMode:NSLineBreakByWordWrapping alignment:NSTextAlignmentLeft];
i--;
textBuffer = @"";
preBuffer = @"";
if(COLUMN_XPOS > 20) {
COLUMN_XPOS = 20;
COLUMN_YPOS += PAGE_HEIGHT;
} else {
COLUMN_XPOS = COLUMN_WIDTH + 60;
}
}
}
if(![preBuffer isEqualToString:@""] && preBuffer != nil){
[preBuffer drawInRect:CGRectMake(COLUMN_XPOS, COLUMN_YPOS, COLUMN_WIDTH, COLUMN_HEIGHT) withFont:[UIFont fontWithName:@"Times New Roman" size:16] lineBreakMode:NSLineBreakByWordWrapping alignment:NSTextAlignmentLeft];
}
contentBounds = CGSizeMake(self.bounds.size.width, self.bounds.size.height);
[renderer updateContentBounds:contentBounds];
}