以编程方式调整UITextField大小会自动恢复为旧大小

时间:2014-05-19 21:08:25

标签: ios iphone objective-c uiview autolayout

在某个用户操作后,我希望调整UITextField的大小并将其移到右侧:例如

CGRect oldFrame = self.sampleTextField.frame;
CGRect newFrame = CGRectMake(oldFrame.origin.x + 100,
                             oldFrame.origin.y, 
                             oldFrame.size.width - 100, 
                             oldFrame.size.height);
[self.sampleTextField setFrame:newFrame];

这可以使用大约半秒钟,然后UITextField会重新捕捉到原始未经编辑的帧。

UITextField已放置在故事板中,但我已从中删除了所有自动布局限制。

自动布局是否会将UITextField返回原始帧?

有没有办法通过我当前的设置实现这一点,还是我必须从故事板中取出UITextField并以编程方式将其添加到视图中?

2 个答案:

答案 0 :(得分:1)

如果您在不向元素添加任何约束的情况下构建和运行,您会发现Interface Builder 修复元素的宽度和高度引脚相对于其位置超视图的左上角。

要使界面对大小或方向的变化做出正确反应,您需要开始添加约束。您还可以在设置框架之前以编程方式删除自动添加的约束,并将translatesAutoresizingMaskIntoConstraints设置为NO

答案 1 :(得分:1)

实现所需内容的最简单方法是在IB中添加适当的约束(左边缘,顶部或底部边缘和宽度),并将IBOutlet设置为左边约束和宽度约束(我将其称为leftCon和widthCon)。在代码中,然后调整这些约束的常量值

self.leftCon.constant += 100;
self.widthCon.constant -= 100;

如果你想要为它设置动画,那么将它们放入(或者只是在上面,它可以以任何方式工作)动画块,

- (void)adjustTextField {
    self.leftCon.constant += 100;
    self.widthCon.constant -= 100;
    [UIView animateWithDuration:1 animations:^{
        [self.view layoutIfNeeded];
    }];
}