View floating over all ViewControllers

Is it possible on iOS that a view always floats over all other views. I ask this because what I would like to achieve is the view that floats over the ViewController and then the Modal View Control, while this particular view still floats over this Modal View Controller (hope that you get what I'm trying to say).

+6
source share
3 answers

There is. You can add your presentation to the main one windowand bring it to the forefront when you need.

The following code assumes that _viewConrollerand _anotherVieware strong properties appDelegate. The configuration, of course, may be different.

.

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

    _viewController = [[ViewController alloc] initWithNibName:@"ViewController" bundle:nil];
    _anotherView = [[UIView alloc] initWithFrame: CGRectMake (0.0,0.0,20.0,20.0)];
    [anotherView setBackgroundColor: [UIColor blueColor]];    

    self.window.rootViewController = self.viewController;
    [self.window makeKeyAndVisible];

    [self.window addSubView: _anotherView];
    [self.window bringSubViewToFront: _anotherView]; //not really needed here but it doesn't do any harm

    return YES;
}
+8

, ( )

UIStoryboard *sb = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
UIViewController *_vc = [sb instantiateViewControllerWithIdentifier:@"FloatingController"];

_anotherView = _vc.view;
[_anotherView setTranslatesAutoresizingMaskIntoConstraints:NO];
[self.window addSubview: _anotherView];

[[VLBConstraintsGenerator sharedInstance] setWidth:200 forView:_anotherView inSuperView:_window];
[[VLBConstraintsGenerator sharedInstance] setHeight:200 forView:_anotherView inSuperView:_window];
[[VLBConstraintsGenerator sharedInstance] setLeading:0 forView:_anotherView inSuperView:_window];


[_anotherView setBackgroundColor:[UIColor grayColor]];

[[_anotherView layer] setBorderWidth:1];
[[_anotherView layer] setBorderColor:[UIColor yellowColor].CGColor];

[self.window makeKeyAndVisible];
[self.window bringSubviewToFront:_anotherView]; //not really needed here but it doesn't do any harm

, , FloatingController

-(void)setWidth:(CGFloat )theWidth forView:(UIView *)theView inSuperView:(UIView *)theSuperView

{
 assert([theSuperView isEqual:theView.superview]);
    NSLayoutConstraint *cn = [NSLayoutConstraint constraintWithItem:theView
                                                          attribute:NSLayoutAttributeWidth
                                                          relatedBy:NSLayoutRelationEqual
                                                             toItem:nil
                                                          attribute:NSLayoutAttributeNotAnAttribute
                                                         multiplier:1
                                                           constant:theWidth];


//    [cn setPriority:999];//make it variable according to the orientation
[theSuperView addConstraint:cn];
}


-(void)setHeight:(CGFloat )theHeight forView:(UIView *)theView inSuperView:(UIView *)theSuperView
{
assert([theSuperView isEqual:theView.superview]);

NSLayoutConstraint *cn = [NSLayoutConstraint constraintWithItem:theView
                                                      attribute:NSLayoutAttributeHeight
                                                      relatedBy:NSLayoutRelationEqual
                                                         toItem:nil
                                                      attribute:NSLayoutAttributeNotAnAttribute
                                                     multiplier:1
                                                       constant:theHeight];

[theSuperView addConstraint:cn];
}

-(void)setLeading:(CGFloat )theLeading forView:(UIView *)theView inSuperView:(UIView *)theSuperView
{
assert([theSuperView isEqual:theView.superview]);

NSLayoutConstraint *cn = [NSLayoutConstraint constraintWithItem:theView
                                                      attribute:NSLayoutAttributeLeading
                                                      relatedBy:NSLayoutRelationEqual
                                                         toItem:theSuperView
                                                      attribute:NSLayoutAttributeLeading
                                                     multiplier:1
                                                       constant:theLeading];

[theSuperView addConstraint:cn];
}
+3

- - . UIView, UILabel.

:

 private var bannerLabel: UILabel = UILabel()
    private let view = UIView()

    // label background color 
    let greenColor = UIColorFromRGB(63,g: 161,b: 81)
    let warningColor = UIColorFromRGB(252,g: 140,b: 38)
    let errorColor = UIColorFromRGB(252,g: 66,b: 54)

- .

func showBannerWithOption(title: String, color: UIColor) {
        view.frame = CGRect(x: 50, y: 150, width: 200, height: 45)
        let window = UIApplication.shared.keyWindow
        guard let mainWindow = window else { return }
        mainWindow.addSubview(view)

        view.centerXAnchor.constraint(equalTo: mainWindow.centerXAnchor).isActive = true
        view.centerYAnchor.constraint(equalTo: mainWindow.centerYAnchor).isActive = true

        bannerLabel.frame = CGRect(x: 50, y: 150, width: 200, height: 21)
        bannerLabel.backgroundColor = color
        bannerLabel.textColor = UIColor.black
        bannerLabel.textAlignment = .center
        bannerLabel.text = title
        view.addSubview(bannerLabel)
        bannerLabel.translatesAutoresizingMaskIntoConstraints = false

        bannerLabel.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 0).isActive = true
        bannerLabel.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant: 0).isActive = true
        bannerLabel.bottomAnchor.constraint(equalTo: view.bottomAnchor, constant: 0).isActive = true
        bannerLabel.topAnchor.constraint(equalTo: view.topAnchor, constant: 0).isActive = true
    }

: CGRect, (). .

.

The showBannerWithOption function with the name and color is as follows if you need it in more than one place.

if you want to call this function just do this:

    override func viewDidLoad() {
        super.viewDidLoad()
    showBannerWithOption(title: "test", color: greenColor) 
}

That's all :) It's quick 5.0

Now you can customize how you want.

0
source

All Articles