无法以编程方式更改UITextView框架大小

时间:2013-02-01 18:19:53

标签: ios xcode interface-builder

我在界面构建器的视图中插入了一个UITextView,现在我想改变它的帧大小,以便它以编程方式适合内容。问题是由于约束,大小似乎被锁定并且不能从代码中取消。如果我在文件检查器中禁用使用自动布局,则每个对象都会删除约束,但我只想更改UITextView而不是其他对象。

[textview setFrame:CGRectMake(x,y,w,h)]; // This doesn't do anything to the uitextview

3 个答案:

答案 0 :(得分:7)

如果您正在使用约束,则必须使用约束来更改UITextView的大小。在笔尖中设置出口,以便从代码访问您需要更改的约束。您可以实时设置约束constant,这通常就足够了。

只是为了澄清其原因:如果视图的框架是由约束定位的,则无法更改视图的框架。嗯,你可以,但它没有结果,这是不好的做法。这是因为布局系统将使用约束本身来为您更改视图的框架!因此,您可以更改框架,但布局系统将读取并解决约束并再次更改框架。

将约束视为布局系统的“待办事项列表”。制约因素本身并无任何作用;它们只是一个规则列表。它是完成工作的布局系统(调用layoutSubviews时)。每次需要布局时,布局系统都会出现,读取约束,找出如何遵守约束,并通过设置视图的框架来实现。您需要使用该系统,而不是反对它。

答案 1 :(得分:0)

所有UIViews和类都是从UIView继承的,具有相同的属性:XIB文件中的“Lock”。 如果您想更改这些视图的框架。您必须设置锁定 “无”

enter image description here

答案 2 :(得分:0)

如果您不想成为约束专家,请按照这样做(在视图控制器中)。

@property UITextView * textView;

//在viewWillAppear

中动态创建UITextView
rect = CGRectMake(194., 180., 464., 524.);
_textView =  [[UITextView alloc] initWithFrame:rect];
[self.view addSubview:_textView];

//现在您可以随意调整大小

 CGRect oldFrame = _textView.frame;
 CGRect newFrame = oldFrame;
 newFrame.size.height += 300;
 [_textView setFrame:newFrame];
相关问题