我的iPhone应用程序中有一个简单的表单。表格通过IB和典型的布线布局和管理(即我不是以编程方式创建这种形式)。
只有在设置了特定的偏好时,才应显示其中一个字段(及其相关标签)。
我可以将字段和标签的alpha设置为0并在这种情况下禁用它们。问题是下面这个现在不可见的字段将保留在同一个地方,并且会有一个很大的空白区域。我的目标是让屏幕看起来都处于正常状态。
有没有办法以编程方式删除(或添加)UI元素,并让下面的内容向上或向下移动以腾出空间?或者我应该考虑为第二种情况制作一个完整的其他NIB文件? (如果我这样做,是否有一种简单的方法来分享共同的元素?)
With Both http://img.skitch.com/20100704-bm41w6wtqkdgh1da99ihb7g32d.jpg
Using Alpha to Hide http://img.skitch.com/20100704-q2sxrj3nf6ya68wp6ubn86n2pa.jpg
Desired when hidden http://img.skitch.com/20100704-82r876pgctee8gb51ujg1dwj7k.jpg
答案 0 :(得分:7)
当每个UI元素链接到IBOutlet指针时,例如
@property (nonatomic, retain) IBOutlet UITextField *field_a;
@property (nonatomic, retain) IBOutlet UITextField *field_b;
@property (nonatomic, retain) IBOutlet UITextField *field_c;
// ...
您可以通过以下方式测试每个元素的可见性:
if (field_a.hidden) {
// ...
} else {
// ...
}
移动它们:
CGPoint pt = field_a.center;
pt.y -= 60;
field_a.center = pt;
或者通过一些动画:
CGPoint position = field_a.center;
position.y -= 60;
[UIView beginAnimations:@"MoveUp" context:NULL];
[UIView setAnimationDuration:0.5];
field_a.center = position;
[UIView commitAnimations];
隐藏元素:
field_a.hidden = YES;
显示元素:
field_a.hidden = NO;
答案 1 :(得分:1)
使用cocoa touch属性:
。隐藏1 .userInteractionEnabled 0
或者你可以:
.alpha = 0
答案 2 :(得分:0)
我最近看过一个关于这个的教程,其中涉及在选择分段控件时在主视图中进一步向下移动子视图。我相信这是一个由beginAnimations:context:触发的动画,但我现在找不到对该教程的引用。
基本上,视图下的视图是隐藏的,一组被移开,另一组被取消隐藏。