在某个用户操作之后,我希望调整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];
}];
}