iOS 7中的UITextView contentsize.height问题

时间:2014-05-05 11:55:39

标签: ios objective-c cocoa-touch uitextview contentsize

我搜索过&花了这么多时间来解决内容大小高度的问题,但是运气不好,没有用。类似的问题可以在堆栈和&其他论坛也,但我没有得到剩下的,这是不允许我的textview解决这个问题。

我必须放置textView的光标和放大器。文本在它的宽度和中心的中心高度。现在我用它 -

        UITextView *tv = object;

        [tv setScrollEnabled:YES];
        CGFloat height = [tv bounds].size.height;
        CGFloat contentheight;

       contentheight = [tv sizeThatFits:CGSizeMake(tv.frame.size.width, FLT_MAX)].height;
         NSLog(@"iOS7; %f %f", height, contentheight);
//        [tv sizeToFit];
        CGFloat topCorrect = height - contentheight;
        topCorrect = (topCorrect <0.0 ? 0.0 : topCorrect);
        tv.contentOffset = (CGPoint){.x = 0, .y = -topCorrect};
         [tv setScrollEnabled:NO];

我使用的第二种方法是 -

#pragma mark- UITextView ContentHeight Messurment

- (CGFloat)measureHeightOfUITextView:(UITextView *)textView
{
    if (floor(NSFoundationVersionNumber) > NSFoundationVersionNumber_iOS_6_1)
    {
        // This is the code for iOS 7. contentSize no longer returns the correct value, so
        // we have to calculate it.
        //
        // This is partly borrowed from HPGrowingTextView, but I've replaced the
        // magic fudge factors with the calculated values (having worked out where
        // they came from)

        CGRect frame = textView.bounds;

        // Take account of the padding added around the text.

        UIEdgeInsets textContainerInsets = textView.textContainerInset;
        UIEdgeInsets contentInsets = textView.contentInset;

        CGFloat leftRightPadding = textContainerInsets.left + textContainerInsets.right + textView.textContainer.lineFragmentPadding * 2 + contentInsets.left + contentInsets.right;
        CGFloat topBottomPadding = textContainerInsets.top + textContainerInsets.bottom + contentInsets.top + contentInsets.bottom;

        frame.size.width -= leftRightPadding;
        frame.size.height -= topBottomPadding;

        NSString *textToMeasure = textView.text;
        if ([textToMeasure hasSuffix:@"\n"])
        {
            textToMeasure = [NSString stringWithFormat:@"%@-", textView.text];
        }

        // NSString class method: boundingRectWithSize:options:attributes:context is
        // available only on ios7.0 sdk.

        NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init];
        [paragraphStyle setLineBreakMode:NSLineBreakByWordWrapping];

        NSDictionary *attributes = @{ NSFontAttributeName: textView.font, NSParagraphStyleAttributeName : paragraphStyle };

        CGRect size = [textToMeasure boundingRectWithSize:CGSizeMake(CGRectGetWidth(frame), MAXFLOAT)
                                                  options:NSStringDrawingUsesLineFragmentOrigin
                                               attributes:attributes
                                                  context:nil];

        CGFloat measuredHeight = ceilf(CGRectGetHeight(size) + topBottomPadding);
        return measuredHeight;
    }
    else
    {
        return textView.contentSize.height;
    }
}

响应如下: enter image description here 在编辑之后,它看起来像是 - enter image description here

现在,还有什么我可以尝试将textView的文本放在UITextView的中心?请更新我。

0 个答案:

没有答案