根据视图隐藏和调整文本字段 iOS

hiding and adjusting of textfields based on view iOS

我天真iOS。我正在开发一个注册页面,其中包含基于视图的隐藏文本字段。为了实现这一点,我为视图实现了 UISegmentedControl 并使用以下代码隐藏基于段的文本字段

- (IBAction)regSegmentButton:(id)sender {

if (_registrationSegment.selectedSegmentIndex ==1) {
    self.vendorID.hidden = NO;
}
else {
    self.vendorID.hidden = YES;
}

}

尽管我达到了我的预期,但这种观点是荒谬的。该视图在下面的图像中表示

我的问题是如何使视图看起来正常,即使隐藏字段与 "vendorscreen.png"(第二张图片)中的表示方式相同。我是否需要应用任何动画才能实现它?如果是,请告诉我该怎么做

请做有需要的..

您可以使用/不使用动画。这是没有动画的步骤。您必须将您的电子邮件 ID、密码、确认密码和注册按钮添加到普通 UIView,例如:view1 然后当您更改开关时,您必须调整 view1 的 'y' 位置。喜欢下面

- (IBAction)regSegmentButton:(id)sender {

    if (_registrationSegment.selectedSegmentIndex ==1) {
        self.vendorID.hidden = NO;
    }
    else {
        self.vendorID.hidden = YES;
    }

    int y = (_registrationSegment.selectedSegmentIndex == 1) ? 200 : 150
    CGRect rect = self.view1.frame;
    rect.origin.y = y;
    self.view1.frame = rect;
}

为了便于理解,我只是对值进行了硬编码,您需要根据自己的看法调整 y 值。

一种解决方案是:您可以拥有一个包含所有底部 UITextField 的 UIView。 您所要做的就是将新视图设置为隐藏视图位置的动画。

    [UIView animateWithDuration:0 animations:^(){
    textFieldContainers.frame = CGRectMake(textFieldContainers.frame.origin.x, textFieldContainers.frame.origin.y - vendorIDTextField.frame.size.height, textFieldContainers.frame.size.width, textFieldContainers.frame.size.height);
}];

另一种是使用约束(将 'static' 视图封装在一个视图容器中也有助于此解决方案)

enter image description here参考 gal marom 的回答,你也可以将剩余的 TextFields 放在 UIView [on storyboard] 中,并使用它的约束到你的 Segmented view,然后你应该点击顶部约束本身 [constrained to分段视图]并在代码中创建它的出口,然后在分段操作的条件下执行以下操作:

Blockquote

@IBOutlet weak var fullnameTF: UITextField!//* by itself

@IBOutlet weak var userEmail: UITextField! //* in the same UIView

@IBOutlet weak var userPassword: UITextField! //* in the same UIView

@IBOutlet weak var viewStackTopCont: NSLayoutConstraint!

@IBAction func segAction(_ sender: Any) {
    if seg.selectedSegmentIndex == 0 {

        fullnameTF?.isHidden = true
        viewStackTopCont.constant = 20 // after the TextField is hidden

    }else if seg.selectedSegmentIndex == 1{
        fullnameTF?.isHidden = false
        viewStackTopCont.constant = 60 //your current constraint margin
    }
}

Blockquote