elb*_*ild 77 iphone visibility interface-builder ios autolayout
我正在为iOS开发一个应用程序,我正在使用带有AutoLayout ON的Storyboard.我的一个视图控制器有一组4个按钮,在某些情况下我想让第一个按钮消失.
如果我使用该setHidden:TRUE
方法,UIButton变得不可见,但它仍然显然在视图中占用空间,结果是一个"洞",我无法填充,使剩余的UIButton浮动到主视图的顶部.
在Android中,我会简单地使用View.GONE
而不是View.INVISIBLE
,但在iOS中我坚持这种行为,我不想相信唯一的解决方案是手动(是的,我的意思是以编程方式)将剩余的元素移动到顶部.
我以为我能够设置某种约束来使一切像Android一样自动,但我没有运气.
在我关闭Autolayout之前,有人能指出我正确的方向吗?
我正在使用IB,但我对程序化的东西也很满意.
更新:
将组件高度设置为0也没有用.
我试过这样的事情:
UIButton *b;
CGRect frameRect = b.frame;
frameRect.size.height = 0;
b.frame = frameRect;
Run Code Online (Sandbox Code Playgroud)
Den*_*niz 39
添加一个约束(NSLayoutAttributeHeight),将视图的高度设置为0对我有用:
[self.view addConstraint:[NSLayoutConstraint constraintWithItem:self.captchaView attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1.0 constant:0]];
Run Code Online (Sandbox Code Playgroud)
Bey*_*yaz 19
关于这个问题的所有答案都是低效的.平等的Android setVisibility的最佳方法:iOS上的Gone方法是StackView
先在编辑器中选择组件,嵌入,Stack View,
使用IBOutlet连接新堆栈视图,然后:
隐:
UIView * firstView = self.svViewFontConfigure.arrangedSubviews[0];
firstView.hidden = YES;
Run Code Online (Sandbox Code Playgroud)
能见度:
UIView * firstView = self.svViewFontConfigure.arrangedSubviews[0];
firstView.hidden = NO;
Run Code Online (Sandbox Code Playgroud)
使用堆栈视图时,所有约束都会得到保留!
Aji*_*til 16
然后在viewController文件中为高度约束创建一个出口,如下所示:
然后在viewDidLoad方法中将约束高度更改为0,如下所示:
override func viewDidLoad() {
super.viewDidLoad()
nsLcButtonHeight.constant = 0
}
Run Code Online (Sandbox Code Playgroud)
要在iOS上实现Androids.GONE功能,请使用UIStackView。之后,按位置隐藏孩子。(Apple文档)
SWIFT 4:
let firstView = cell.rootStackView.arrangedSubviews[0]
firstView.isHidden = true // first view gone
Run Code Online (Sandbox Code Playgroud)
这是一个表格单元格示例,只需将其放入其中Stack view
并为GONE
孩子获取物品。
您可以做的是在堆栈视图下对视图进行分组.然后,当您隐藏特定视图时,其余视图将自动移动以填充空间.
您可能需要查看堆栈视图上的Apple文档:https: //developer.apple.com/reference/uikit/uistackview
或在线教程,例如:https://www.appcoda.com/stack-views-intro/
1) 如果您的按钮垂直放置,则必须将 设为height
0,如果是水平放置的按钮,请尝试设置width
为 0,或者您可以将两者都设置为 0。
或者
2)您可以尝试这种基于button2
以下方法的方法button1
:
- (void)viewDidLoad
{
[super viewDidLoad];
UIButton *button1 = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[button1 setTitle:@"hello" forState:UIControlStateNormal];
UIButton *button2 = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[button2 setTitle:@"world" forState:UIControlStateNormal];
[button1 sizeToFit]; [button2 sizeToFit];
[button2 setFrame:CGRectMake(button1.frame.origin.x, button1.frame.origin.y, button2.frame.size.width, button2.frame.size.height)];
[self.view addSubview:button1];
[self.view addSubview:button2];
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
30175 次 |
最近记录: |