iOS相当于View.GONE

sci*_*fic 8 hidden android uiviewcontroller ios autolayout

有没有相当于Android View.GONE的iOS?

在Android中,将视图设置为GONE将使其不可见,并确保视图不会占用布局中的任何空间.我知道在iOS中,你可以设置一个隐藏的视图

[viewName setHidden:true];
Run Code Online (Sandbox Code Playgroud)

但是视图仍然占用了布局中的空间,我认为完全删除视图并在以后重新创建它是没有效率的.

(注意:我看过这篇文章:iOS相当于Android View.GONE可见性模式,但是没有接受的答案,并且将高度设置为0对我来说不起作用,因为页面上的后续视图在我之后没有移动视图已删除)

Pha*_*inh 7

使用constant= 0 添加宽度/高度约束your View将使your View宽度和高度= 0(像它一样GONE)

// set the height constraint to 0 
[self.view addConstraint:[NSLayoutConstraint constraintWithItem:theGoneView
                                                                   attribute:NSLayoutAttributeHeight
                                                                   relatedBy:NSLayoutRelationEqual
                                                                      toItem:nil
                                                                   attribute:NSLayoutAttributeNotAnAttribute
                                                                  multiplier:1.0
                                                                    constant:0]];

// set the width constraint to 0            
    [self.view addConstraint:[NSLayoutConstraint constraintWithItem:theGoneView
                                                               attribute:NSLayoutAttributeWidth
                                                               relatedBy:NSLayoutRelationEqual
                                                                  toItem:nil
                                                               attribute:NSLayoutAttributeNotAnAttribute
                                                              multiplier:1.0
                                                                constant:0]];
Run Code Online (Sandbox Code Playgroud)

在斯威夫特

// set the width constraint to 0
let widthConstraint = NSLayoutConstraint(item: theGoneView, attribute: NSLayoutAttribute.Width, relatedBy: NSLayoutRelation.Equal, toItem: nil, attribute: NSLayoutAttribute.NotAnAttribute, multiplier: 1, constant: 0)
view.addConstraint(widthConstraint)

// set the height constraint to 0        
let heightConstraint = NSLayoutConstraint(item: theGoneView, attribute: NSLayoutAttribute.Height, relatedBy: NSLayoutRelation.Equal, toItem: nil, attribute: NSLayoutAttribute.NotAnAttribute, multiplier: 1, constant: 0)
    view.addConstraint(heightConstraint)
Run Code Online (Sandbox Code Playgroud)

或者这个UIView扩展

extension UIView {        

    func goAway() {
        // set the width constraint to 0
        let widthConstraint = NSLayoutConstraint(item: self, attribute: NSLayoutAttribute.width, relatedBy: NSLayoutRelation.equal, toItem: nil, attribute: NSLayoutAttribute.notAnAttribute, multiplier: 1, constant: 0)
        superview!.addConstraint(widthConstraint)

        // set the height constraint to 0
        let heightConstraint = NSLayoutConstraint(item: self, attribute: NSLayoutAttribute.height, relatedBy: NSLayoutRelation.equal, toItem: nil, attribute: NSLayoutAttribute.notAnAttribute, multiplier: 1, constant: 0)
        superview!.addConstraint(heightConstraint)
    }

}
Run Code Online (Sandbox Code Playgroud)

希望这有帮助


ast*_*ter 4

AFAIK 只有可能的等价物:

[yourView removeFromSuperview]
Run Code Online (Sandbox Code Playgroud)

直到您viewsuperview其中删除ios否则它将占用布局中的空间。

因此,根据您的需要,您可以在需要时添加或删除视图(与android中的view.GONE相同)。