Ios UITextView sizeToFit不工作

Ios UITextView sizeToFit不工作,ios,objective-c,Ios,Objective C,奇怪的是,我一直在到处寻找这个答案,但似乎什么都不管用 我有一个简单的UITextView,我正试图根据其内容在viewController中调整其大小: - (void)viewDidLoad { [super viewDidLoad]; NSString *lorum = @"Lorem ipsum dolor sit er elit lamet, consectetaur cillium adipisicing pecu, sed do eiusmod tempor in

奇怪的是,我一直在到处寻找这个答案,但似乎什么都不管用

我有一个简单的
UITextView
,我正试图根据其内容在viewController中调整其大小:

- (void)viewDidLoad
{
    [super viewDidLoad];

    NSString *lorum = @"Lorem ipsum dolor sit er elit lamet, consectetaur cillium adipisicing pecu, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Nam liber te conscient to factor tum poen legum odioque civiuda.";

    self.textView.text = lorum;

    self.textView.scrollEnabled = NO;
    [self.textView sizeToFit];
    [self.textView layoutIfNeeded];
}
但这就是我最后得到的:

我错过了什么明显的东西吗

已更新(帧背景):


尝试手动调整帧大小

self.textView.text = lorum;
CGSize size = [lorum sizeWithFont:self.textView.font
                         constrainedToSize:CGSizeMake(self.textView.frame.size.width, 9999)
                             lineBreakMode:UILineBreakModeWordWrap];
CGRect frame = self.textView.frame;
frame.size.width = size.width;
frame.size.height = size.height;
self.textView.frame = frame;
这应该将textview的大小设置为文本的大小(限制为textview的宽度)。起源应该保持不变

据我所知,
sizeToFit
仅收缩帧,而不会扩展帧。因此,如果您的帧最初只有一行高,它将保持只有一行高

或者,您可以将textView的框架设置为整个窗口,然后使用sizeToFit,这样应该可以正常工作

编辑:

为了避免不推荐使用的函数,您还可以使用

CGSize size = [lorum sizeWithAttributes:@{NSFontAttributeName:self.textView.font}];

你试过使用一种新的方法吗

例如:

[self.textView setContentMode:UIViewContentModeScaleToFill];

正如我在评论中所写,在我看来,如果你不想使用UITextView的滚动,我建议使用一个简单的UILabel。。这是代码:

编辑:如果出于某些原因(如可编辑文本或可选文本)需要使用UITextView,可以使用相同的代码并进行一些修改(我在类似代码的注释中添加了这些修改)

EDIT2如果标签位于故事板中,请检查约束或删除自动布局

h

m

看看这个解决方案。这对我有用

您所要做的就是在脚本上添加高度约束,并在视图控制器中添加一个插座。然后将以下行添加到ViewDidDisplay方法:

CGSize size=self.textView.contentSize; self.textViewHeightConstraint.constant=size.height



如果您遵循链接,则会有一个示例项目。

可能是重复的,而不是重复的…这是不同的problem@Jeremy请删除重复的标签…该标签表示文本已被删除。我的意思是框架没有调整到多行文本。请为textview设置背景色,然后查看框架的显示位置。self.textview.backgroundColor=[UIColor grayColor];有照片!不起作用,方法sizeWithFont。。。在IOS7中不推荐使用,然后使用
[lorum sizeWithAttributes:@{NSFontAttributeName:self.textView.font}]
[文本边界矩形大小:(CGSize){.width=self.textView.frame.size.width、.height=CGFLOAT_MAX}选项:NSStringDrawingUserLineFragmentOrigination属性:@{NSFontAttributeName=self.textView.font}上下文:nil]属性大小(self.textView.size=size;)。frame.size不可分配更新答案,选项更多,排印错误固定。显示您尝试过但未成功的东西通常很有用,这样其他人就不会给您一个您已经知道对您的情况不起作用的答案。是否可以修改视图中已存在的uilabel?@Allen yes这是可能的。。如果您想使用UIExtViewThank,我编辑了我的代码,但是否可以对已经存在的uilabel执行此操作?这意味着我在我的xib/故事板中已经有了它,并且我不调用[self.view addSubview:label]@Allen yes只需删除该行和label=[[UILabel alloc]init],并更改其框架yes这是我尝试过的,但不起作用。“这对你有用吗?”艾伦你投票否决了我的建议?也许是糟糕的一天?提醒我不要再提任何建议了???抱歉不是针对个人的!我只是想让工作答案浮出水面。是的,了解@Allen,但对于像我这样的新手来说,这对我们更多地参与这个论坛的能力有着非常实际的影响,无论我们的能力或热情如何。让工作答案浮动到顶部的一个更有效的方法是让用户向上投票。仅供参考:我脑海中的下一个建议实际上与帮助您的答案有关,它是一个链接,指向一个非常好的关于堆栈溢出的问答,我将其添加为我的最爱。有人能解释为什么这在ViewDidDisplay中有效,但在ViewDidLayoutSubView中无效吗?我认为这是最好的解决方案,很容易理解为什么sizeToFit对Textview无效,因为Textview内部是一个滚动视图。因此,我们需要更新sizeToFit的约束高度。@Spoek:此解决方案适用于ViewDidDisplay或ViewDidLayoutSubView。我刚查过。
[self.textView setContentMode:UIViewContentModeScaleToFill];
  @interface ViewController : UIViewController {

    IBOutlet UILabel *label;

   }
 - (void)viewDidLoad {
   [super viewDidLoad];

 //  UILabel *label = [[UILabel alloc] init];
   label.backgroundColor = [UIColor lightGrayColor];

   NSString *lorum = @"Lorem ipsum dolor sit er elit lamet, consectetaur cillium adipisicing pecu, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Nam liber te conscient to factor tum poen legum odioque civiuda.";

   //for use labrect with UITextView you set the font of UITextView:
   //label.font = [UIFont systemFontOfSize:17];       

   CGSize maxSize = CGSizeMake(320, 410);
   CGRect labrect = [lorum boundingRectWithSize:maxSize options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName:label.font} context:Nil];

   label.text = lorum;
   //for use UITextView you should comment the line under
   label.numberOfLines = 0;
   label.frame = CGRectMake(0, 30, 320, labrect.size.height);

 //  [self.view addSubview:label];

  };