根据视图隐藏和调整文本字段 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
我天真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