以编程方式调整UITextField的大小会自动恢复到原来的大小



在某个用户操作之后,我希望调整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从故事板和编程添加到视图?

如果你在没有给元素添加任何约束的情况下构建和运行,你会发现Interface Builder 固定了元素的宽度和高度,并且固定了相对于父视图左上角的位置。

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

完成您想要的最简单的方法是在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];
    }];
}

最新更新