【问题标题】:AutoLayout is not working after resized controls programmatically - iOS [duplicate]以编程方式调整控件大小后自动布局不起作用 - iOS [重复]
【发布时间】:2013-07-03 11:47:35
【问题描述】:

我一直在使用 AutoLayout 功能。一切正常,但是如果我以编程方式调整任何控件的大小,其他子视图或控件不会相应地安排。 如何在以编程方式调整任何控件的大小后更新约束。

在代码中调整控件大小后 AutoLayout 会起作用吗?

编辑:

我在这里根据字符串调整文本视图的大小,但它与下面的子视图重叠。

 - (void)textViewDidChange:(UITextView *)textView
    {
    if (textView == pupose_txt_view) {
        CGSize maximumLabelSize = CGSizeMake(self.topic_text_view.frame.size.width,
                                             FLT_MAX);

        UILabel *label = [[UILabel alloc] initWithFrame:pupose_txt_view.frame];
        CGSize expectedLabelSize = [pupose_txt_view.text sizeWithFont:pupose_txt_view.font
                                      constrainedToSize:maximumLabelSize
                                          lineBreakMode:label.lineBreakMode];


        CGRect newFrame = pupose_txt_view.frame;
        newFrame.size.height = expectedLabelSize.height;
        pupose_txt_view.frame = newFrame;
    }
}

【问题讨论】:

  • 如何调整控件的大小,显示一些代码。
  • @Sven 请检查编辑。

标签: iphone ios cocoa-touch uiview autolayout


【解决方案1】:

如果您使用自动布局,则不能使用setFrame: 更新视图的位置或大小。相反,您必须更新约束以设置新大小,以便布局系统可以更新所有视图的位置。

为此,您为文本大小的高度约束创建一个出口,并在您想要更改高度时将其设置为constant 属性。您还可以删除文本视图的约束并创建新的约束,但更新常量是首选方式,因为它需要更少的代码并且在运行时更高效。

【讨论】:

    猜你喜欢
    • 2011-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-22
    • 2015-05-02
    相关资源
    最近更新 更多