Я искал весь стек, чтобы ответить на этот вопрос, хотя в этой теме есть много вопросов, по-видимому, нет ответа на вопрос, по крайней мере, не для меня.Автоматическое расширение UIView и CGPath в соответствии с текстом ядра
У меня есть пользовательский UIView фиксированного размера в раскадровке (в ячейке прототипа). Я подклассифицировал UIView для него и написал метод drawRect. Это в основном собирает отформатированную строку, то я рисую это так:
// now for the actual drawing
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetShadowWithColor(context,
CGSizeMake(0, 1),
0,
[UIColor whiteColor].CGColor);
CGMutablePathRef path = CGPathCreateMutable(); //1
CGPathAddRect(path, NULL, self.bounds);
// flip the coordinate system
CGContextSetTextMatrix(context, CGAffineTransformIdentity);
CGContextTranslateCTM(context, 0, self.bounds.size.height);
CGContextScaleCTM(context, 1.0, -1.0);
CTFramesetterRef framesetter =
CTFramesetterCreateWithAttributedString((__bridge CFAttributedStringRef)stringToDraw); //3
CTFrameRef frame = CTFramesetterCreateFrame(framesetter, CFRangeMake(0, 0), path, NULL);
CTFrameDraw(frame, context); //4
Это нормально и работает, и если я по умолчанию размер достаточно большой, он будет обрабатывать несколько строк текста.
CGPath использует все UIView, это прекрасно/желательно.
Я хочу, чтобы ширина CGPath была фиксированной, но я хочу, чтобы высота расширялась, чтобы разместить практически неограниченное количество текста, прямо сейчас оно просто отключается (из-за того, что путь/представление не является достаточно большим, чтобы охватить его)
Я пробовал играть с CTFramesetterSuggestFrameSizeWithConstraints безрезультатно. Может кто-то, пожалуйста, помогите мне разработать какой-то код, который достигнет того, что мне нужно сделать?
Спасибо @nicolasthenoz, хотя другая причина, по которой я нуждался в нем для расширения, чтобы соответствовать, был, потому что я планирую позиционировать другие элементы сразу после/под текстом. Также моя ячейка таблицы также расширила бы эту большую, больше, чем требуется для текста. –
'sizeWithFont' не будет работать точно с CoreText, по крайней мере, не во всех случаях. –