2014-02-24 47 views
1

我有一个简单的textView谁动态填充了数据。我想调整textview的高度,一旦填充数据,以便我看不到垂直滚动或文本被剪辑。我想以编程方式执行此任务。我有一个标签,应该被放置在文本视图的高度低于20像素像“有趣”。我试图做代码。但我有一些问题,如对齐问题。如果我可以运行该程序,输出将显示像这样。如何在ios中动态调整基于字符串的UITextview高度

enter image description here

这是我Program.please帮我任何人。

lblHobbies = [[UILabel alloc]initWithFrame:CGRectMake(10, 310, 300, 20)]; 

[email protected]"Hobbies"; 

lblHobbies.font=[UIFont systemFontOfSize:16.0]; 

lblHobbies.textColor=[UIColor colorWithRed:153.0f/255.0f green:153.0f/255.0f blue:153.0f/255.0f alpha:1]; 

[scrollView addSubview:lblHobbies]; 

lblInterests = [[UILabel alloc]initWithFrame:CGRectMake(10, 420, 300, strSize.height+30)]; 

[email protected]"Interests"; 

lblInterests.font=[UIFont systemFontOfSize:16.0]; 

lblInterests.textColor=[UIColor colorWithRed:153.0f/255.0f green:153.0f/255.0f blue:153.0f/255.0f alpha:1]; 

[scrollView addSubview:lblInterests]; 

NSDictionary *attributes = @{NSFontAttributeName: [UIFont systemFontOfSize:14]}; 

CGRect rect = 
     [tViewhobbies.text boundingRectWithSize:CGSizeMake(300, MAXFLOAT) 
             options:NSStringDrawingUsesLineFragmentOrigin 
             attributes:attributes 
             context:nil]; 

tViewhobbies=[[UITextView alloc]init]; 

tViewhobbies.frame=CGRectMake(10, 330,300, rect.size.height); 

[tViewhobbies setUserInteractionEnabled:NO]; 

tViewhobbies.backgroundColor=[UIColor colorWithRed:0.662745 green:0.662745 blue:0.662745 alpha:0.5]; 

tViewhobbies.delegate=self; 

[scrollView addSubview:tViewhobbies]; 

NSDictionary *attributes1 = @{NSFontAttributeName: [UIFont systemFontOfSize:14]}; 

CGRect rect1 = 
     [tViewInterests.text boundingRectWithSize:CGSizeMake(300, MAXFLOAT) 
              options:NSStringDrawingUsesLineFragmentOrigin 
             attributes:attributes1 
              context:nil]; 

tViewInterests=[[UITextView alloc]init]; 

tViewInterests.frame=CGRectMake(10, 450, 300, rect1.size.height); 

[tViewInterests setUserInteractionEnabled:NO]; 

tViewInterests.backgroundColor=[UIColor colorWithRed:0.662745 green:0.662745 blue:0.662745 alpha:0.5]; 

tViewInterests.delegate=self; 

[scrollView addSubview:tViewInterests]; 
+2

这两个支持看到这个http://stackoverflow.com/questions/19215199/dynamically-size-uitableviewcell-according-to-uilabel-with-paragraph-spacing/19217965#19217965支持iOS6和iOS7 –

+0

干草看到我的答案希望你有一些想法,只是使用你的代码insted你的:) :) –

回答

4

经过下面的代码,希望可以帮助ü

self.scrollView.contentSize = CGSizeMake(320, 700); 
    UILabel *lblHobbies = [[UILabel alloc]initWithFrame:CGRectMake(self.scrollView.bounds.origin.x + 2, self.scrollView.bounds.origin.y + 2, 75, 40)]; 
    [email protected]"Hobbies"; 
    lblHobbies.font=[UIFont systemFontOfSize:16.0]; 
    lblHobbies.textColor=[UIColor colorWithRed:153.0f/255.0f green:153.0f/255.0f blue:153.0f/255.0f alpha:1]; 

    [self.scrollView addSubview:lblHobbies]; 


    //add this after the hobbies textview so u need to calculate the height, so wy dont you put some helper method that returns the height for the text 
    //i took some long text that u want to display 
    NSString *str = @"BARCELONA, Spain -- Nokia is targeting emerging markets with three low-cost smartphones that use Google's Android operating system rather than the Windows Phone software from Microsoft, which is about to buy Nokia's phone business"; 


    CGSize hobbiesTextViewSize = [self calculateHeightForString:str]; 
    //now set the hobbiesTextView frame and also the text 
    UITextView *tViewhobbies = [[UITextView alloc]initWithFrame:CGRectMake(self.scrollView.bounds.origin.x + 2, self.scrollView.bounds.origin.y + 40, hobbiesTextViewSize.width, hobbiesTextViewSize.height+ 5)]; 
    tViewhobbies.font = [UIFont systemFontOfSize:17.0f]; 
    tViewhobbies.text = str;//set the text hear 
    [self.scrollView addSubview:tViewhobbies]; 

    //now add the lblInterests label 
    UILabel *lblInterests = [[UILabel alloc]initWithFrame:CGRectMake(self.scrollView.bounds.origin.x + 2, self.scrollView.bounds.origin.y + lblHobbies.frame.size.height + hobbiesTextViewSize.height + 2, 75, 40)]; 
[email protected]"Interests"; 

lblInterests.font=[UIFont systemFontOfSize:16.0]; 

lblInterests.textColor=[UIColor colorWithRed:153.0f/255.0f green:153.0f/255.0f blue:153.0f/255.0f alpha:1]; 
[self.scrollView addSubview:lblInterests]; 


NSString *str1 = @"Nokia will ditch many of the Google services that come with Android, which Google lets phone makers customize at will. Instead, the new Nokia X line announced Monday will emphasize Microsoft services such as Bing search, Skype communications and OneDrive file storage. Its home screen sports larger, resizable tiles resembling those on Windows phone."; 

    //now calculate the height for Interests text 
    CGSize interestTextViewSize = [self calculateHeightForString:str1]; 
    UITextView *tViewInterests = [[UITextView alloc]initWithFrame:CGRectMake(self.scrollView.bounds.origin.x + 2, self.scrollView.bounds.origin.y + lblHobbies.frame.size.height + lblInterests.frame.size.height + tViewhobbies.frame.size.height + 4, interestTextViewSize.width + 2, interestTextViewSize.height+ 2)]; 
    tViewInterests.font = [UIFont systemFontOfSize:17.0f]; 
    tViewInterests.text = str1; 
    [self.scrollView addSubview:tViewInterests]; 



} 

//our helper method 
- (CGSize)calculateHeightForString:(NSString *)str 
{ 
    CGSize size = CGSizeZero; 

UIFont *labelFont = [UIFont systemFontOfSize:17.0f]; 
NSDictionary *systemFontAttrDict = [NSDictionary dictionaryWithObject:labelFont forKey:NSFontAttributeName]; 

NSMutableAttributedString *message = [[NSMutableAttributedString alloc] initWithString:str attributes:systemFontAttrDict]; 
CGRect rect = [message boundingRectWithSize:(CGSize){320, MAXFLOAT} 
              options:NSStringDrawingUsesLineFragmentOrigin 
              context:nil];//you need to specify the some width, height will be calculated 
size = CGSizeMake(rect.size.width, rect.size.height + 5); //padding 

return size; 


} 
+0

感谢您的response.I试图运行您的code.But我得到异常这一行“NSMutableAttributedString * message = [ [NSMutableAttributedString alloc] initWithString:str attributes:systemFontAttrDict];“ – user3222991

+0

什么是例外...... !! ..?它应该工作等待,我会尝试 –

+0

清洁和建设项目 –

0

输入代码hereYou可以使用标签。

 
myLabel.text = @"Your String"; 
CGSize labelSize = [myLabel.text sizeWithFont:myLabel.font 
          constrainedToSize:CGSizeMake(320,MAX_HEIGHT_YOU_WANT_TO_SET) 
           lineBreakMode:NSLineBreakByWordWrapping]; 
CGRect frame = myLabel.frame; 
frame.size.height = labelSize.height; 
myLabel.frame = frame; 

1

这是我如何做的:

+(CGFloat)getLabelDymanicHeightOfStringWithText:(NSString *)text andFont:(UIFont *)font andFrame:(CGRect)frame { 
    CGSize maxSize = CGSizeMake(frame.size.width, 999999.0); 
    int height = 0; 

NSDictionary *attributesDictionary = [NSDictionary dictionaryWithObjectsAndKeys: 
             font, NSFontAttributeName, 
             nil]; 

if (IS_IOS_6)//iOS 6 macro 
{ 
    CGSize size = [text sizeWithFont:font 
          constrainedToSize:maxSize 
           lineBreakMode:NSLineBreakByWordWrapping]; 
    height = size.height; 
} 
else 
{ 
    CGRect frame = [text boundingRectWithSize:maxSize 
              options:NSStringDrawingUsesLineFragmentOrigin 
              attributes:attributesDictionary 
              context:nil]; 
    height = frame.size.height; 
} 

return height+5; 
} 

通过这个方法,你的文字文本字体和框架。

0

,你可以简单地改变TextView的高度到textView.contentSize.height的高度。这样做你textView将更新并显示它包含的所有文本。

textView.frame = CGRectMake(textView.frame.origin.x, textView.frame.origin.y, textView.frame.size.width,textView.contentSize.height); 

希望这可以帮助你。 快乐编码:)