【问题标题】: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 对象,这将为您提供它的属性,以便您知道框架是否已更改。

标签: iphone ios objective-c uitextfield cgrect


【解决方案1】:

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

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

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

【讨论】:

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

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

[self setTranslatesAutoresizingMaskIntoConstraints:YES];

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

【讨论】:

  • 这对我也不起作用。 [self setTranslatesAutoresizingMaskIntoConstraints:YES]; 语法无效,所以我尝试了 self.submitButton.translatesAutoresizingMaskIntoConstraints = YES;self.view.translatesAutoresizingMaskIntoConstraints = YES;,两者都不起作用
猜你喜欢
  • 2011-04-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多