代码之家  ›  专栏  ›  技术社区  ›  Jane Sales

具有给定字体的字符串长度,以适合UItextView 2-返回

  •  3
  • Jane Sales  · 技术社区  · 15 年前

    this question 我要求有一种好的方法来截断一个字符串以适合给定的UITextView。由于没有直接由sdk提供的方法,所以我在下面编写了递归方法(仅由以下公共方法调用)。但是,除非在计算字符串高度时从字段宽度中减去一个15(kfudgefactor)的混合因子,否则这不起作用。如果不这样做,返回的字符串对于字段来说实际上太长了,并在其下多显示一行。有人知道为什么,我应该用什么来代替这个软糖吗?

    #pragma mark Size string to fit the new view
    
    #define kFudgeFactor 15.0
    #define kMaxFieldHeight 9999.0
    
    // recursive method called by the main API
    -(NSString*) sizeStringToFit:(NSString*)aString min:(int)aMin max:(int)aMax
    {
    if ((aMax-aMin) <= 1)
        {
        NSString* subString = [aString substringToIndex:aMin];
        return subString;
        }
    
    int mean = (aMin + aMax)/2; 
    NSString* subString = [aString substringToIndex:mean];
    
    CGSize tallerSize = CGSizeMake(self.frame.size.width-kFudgeFactor,kMaxFieldHeight);
    CGSize stringSize = [subString sizeWithFont:self.font constrainedToSize:tallerSize lineBreakMode:UILineBreakModeWordWrap];
    
    if (stringSize.height <= self.frame.size.height)
            return [self sizeStringToFit:aString min:mean max:aMax]; // too small
    else    
            return [self sizeStringToFit:aString min:aMin max:mean];// too big
    }
    
    -(NSString*)sizeStringToFit:(NSString*)aString
    {
    
    CGSize tallerSize = CGSizeMake(self.frame.size.width-kFudgeFactor,kMaxFieldHeight);
    CGSize stringSize = [aString sizeWithFont:self.font constrainedToSize:tallerSize lineBreakMode:UILineBreakModeWordWrap];
    
    // if it fits, just return
    if (stringSize.height < self.frame.size.height)
        return aString; 
    
    // too big - call the recursive method to size it       
    NSString* smallerString = [self sizeStringToFit:aString min:0 max:[aString length]];
    return smallerString;   
    }
    
    2 回复  |  直到 15 年前
        1
  •  5
  •   Frank Szczerba    15 年前

    UIScrollView 似乎使用一个固定的8像素插入双方。这与对齐或字体大小无关(基于测试和观察,而不是任何内部的明确知识)。

    所以看来你使用软糖因子是正确的,但它应该是 16.0 不是 15.0 .

        2
  •  0
  •   drudru    15 年前

    这可能是因为uiview的框架与内容视图的大小不同。 uiscrollView中的uitextView子类。