iOS等效于Android View.GONE可见性模式

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)

  • Swift版本:`self.view.addConstraint(NSLayoutConstraint(item:self.captchaView,attribute:.Height,relatedBy:.Equal,toItem:nil,attribute:.NotAnAttribute,multiplier:1.0,constant:0)) (10认同)
  • 如果我不知道所需视图的实际高度(例如稍后渲染的容器视图)怎么办? (2认同)

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)


Md *_*ury 7

要在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孩子获取物品。

在此处输入图片说明


mec*_*don 6

您可以做的是在堆栈视图下对视图进行分组.然后,当您隐藏特定视图时,其余视图将自动移动以填充空间.

您可能需要查看堆栈视图上的Apple文档:https: //developer.apple.com/reference/uikit/uistackview

或在线教程,例如:https://www.appcoda.com/stack-views-intro/


iph*_*oid 1

1) 如果您的按钮垂直放置,则必须将 设为height0,如果是水平放置的按钮,请尝试设置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)