【问题标题】:Can't change UITextView frame size programmatically无法以编程方式更改 UITextView 帧大小
【发布时间】:2013-02-01 18:19:52
【问题描述】:

我已经使用 Interface builder 在视图中插入了一个 UITextView,现在我想更改它的框架大小,以便它以编程方式适合内容。问题是由于限制,大小似乎被锁定并且无法从代码中更改。如果我在文件检查器中禁用自动布局,每个对象都会删除约束,但我只想更改 UITextView 而不是其他对象。

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

【问题讨论】:

  • 你想用哪种方法设置它?我假设它作为 IBOutlet 连接?

标签: ios xcode interface-builder


【解决方案1】:

如果你使用约束,那么你必须使用约束来改变 UITextView 的大小。在 nib 中设置 outlet 以从您的代码访问您需要更改的约束。您可以实时设置约束的constant,这通常就足够了。

只是为了澄清原因:如果视图的框架由约束定位,则不能更改它。好吧,你可以,但这是徒劳的,而且是不好的做法。这是因为约束本身将被布局系统用来为您更改视图的框架!因此,您可以更改框架,但布局系统随后将读取并解析约束并再次更改框架。

将约束视为布局系统的“待办事项列表”。约束本身没有任何作用;它们只是规则列表。工作的是布局系统(当layoutSubviews 被调用时)。每次需要布局时,布局系统都会出现,读取约束,计算出如何遵守它们,然后这样做——通过设置视图的框架。您需要使用该系统,而不是反对它。

【讨论】:

  • 然后重读我说的话。我说你可以改变大小,但是你必须通过改变相关约束的constant来做到这一点。您可能想阅读我关于这个主题的书:apeth.com/iOSBook/ch14.html#_autolayout
【解决方案2】:

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

【讨论】:

  • 似乎不相关!关闭自动布局也可以正常工作:)
【解决方案3】:

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

@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];

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-06-16
    • 2013-09-06
    • 2015-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多