如何移动界面生成器放置的文本字段和按钮

Posted

技术标签:

【中文标题】如何移动界面生成器放置的文本字段和按钮【英文标题】:How to move a Textfield and Button placed by Interface Builder 【发布时间】:2013-09-12 00:55:47 【问题描述】:

我在 3.5 英寸 iPhone 的 Interface Builder 中放置了一个文本字段和按钮。我以编程方式检查它是否是 iPhone 5,如果是则文本字段和按钮。我在视图控制器、文本字段和按钮上未选中“自动调整子视图”。我的代码在 viewDidLoad 中,如果它是 iPhone 5,它会命中行但不会移动文本字段或按钮。

if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)

    CGSize result = [[UIScreen mainScreen] bounds].size;
    if(result.height == 568)
    
        self.chatBox.frame = CGRectMake(20,509,201,30);
        self.submitButton.frame = CGRectMake(227,504,73,39);

        [self.view addSubview:self.chatBox];
        [self.view addSubview:self.submitButton];
    

【问题讨论】:

在条件内不需要 addSubview,因为您正在使用 IB 获取对象。所以删除这两行并记录您的 self.chatBox 和 self.submitButton 对象,这将为您提供它的属性,以便您知道框架是否已更改。 【参考方案1】:

如果您使用自动布局,您的约束可能优先于您上面的代码。没有自动布局,我使用了这段代码:

    int adjustY=44;
    CGPoint iPhone5center=CGPointMake(theButton.center.x,theButton.center.y+adjustY);
    theButton.center=iPhone5center; 

请参阅this question 了解更多详情。我在滚动视图中使用自动布局时遇到问题。

【讨论】:

如果你使用自动布局,约束设置过程发生在 viewDidLoad 之后。尝试在 viewDidAppear 中添加您的代码。看到这个答案***.com/a/12632880/1203475。【参考方案2】:

您在这里遇到的问题是框架被自动布局覆盖。在使用自动布局调整视图上的框架之前,添加以下代码行:

[self setTranslatesAutoresizingMaskIntoConstraints:YES];

这应该将您设置的任何框架转换为新的约束并更新它们。如果您不想将它们转换为约束,显然只需将“NO”传递给此消息即可实现此目的。

【讨论】:

这对我也不起作用。 [self setTranslatesAutoresizingMaskIntoConstraints:YES]; 语法无效,所以我尝试了 self.submitButton.translatesAutoresizingMaskIntoConstraints = YES;self.view.translatesAutoresizingMaskIntoConstraints = YES;,两者都不起作用

以上是关于如何移动界面生成器放置的文本字段和按钮的主要内容,如果未能解决你的问题,请参考以下文章

tkinter小部件界面交互式按钮

如何在 Xcode 中通过代码触发按钮

使用按钮单击生成文本字段小部件并保存文本输入颤动

Android:从运行时生成的文本字段中将数据保存到Firebase

带有按钮和文本字段的 UIScrollview [关闭]

如何使用jQuery unobtrusive和Asp.Net Mvc验证动态生成的单选按钮组?