代码之家  ›  专栏  ›  技术社区  ›  Duck

iphone-关于UITextView及其大小的问题

  •  0
  • Duck  · 技术社区  · 14 年前

    我有一个UITextView,它应该有一行文本。

    字体大小由滑块控制。当用户控制滑块时,我使用计算新的UITextView大小(这是滑块移动时调用的方法)。

    - (void) changeFontSize:(id)sender {
        UISlider *slider = (UISlider *)sender;
        CGFloat newSize = (CGFloat)[slider value];
    
        myTextView.font = [UIFont boldSystemFontOfSize:newSize];
        [self adjustBoxforSize:myTextView.text];
    }
    
    - (void) adjustBoxForSize:(NSString*)myText {
    
        CGFloat fontSize = myTextView.font.pointSize;
    
        CGSize newSize = 
            [myText sizeWithFont:[UIFont boldSystemFontOfSize:fontSize]];
        newSize.width = newSize.width * 1.5; // make it 50% larger 
        newSize.height = newSize.height * 1.5; // make it 50% taller
        CGRect myFrame = CGRectMake(0.0f, 0.0f, newSize.width, newSize.height);
        myTextView.frame = myFrame;
    }
    

    如果我减少字体,这就是结果

    alt text

    问题是:如果我将文本缩放到合适的大小,并且确实将其放大50%,那么文本怎么可能不在文本视图中??

    我错过什么了吗?sizeWithFont似乎没有正确计算大小。

    谢谢。

    2 回复  |  直到 14 年前
        1
  •  1
  •   MaxFish    14 年前

    TextView具有不随视图大小增长的填充。向文本的计算大小添加一个固定的值就可以实现这一点。 像这样:

    newSize.width = newSize.width + 20; 
    

    20对你来说似乎是个不错的数字,但你可以试着调整一下。

        2
  •  1
  •   MaxFish    14 年前

    也许我错了,但是:

    newSize.width = fontSize.width * 1.5; // make it 50% larger 
    newSize.height = fontSize.height * 1.5; // make it 50% taller
    

    不应该是这样吗?

    newSize.width = newSize.width * 1.5; // make it 50% larger 
    newSize.height = newSize.height * 1.5; // make it 50% taller