что tabBar не будет скрыто Полностью в быстрой 4? [Дубликат]

Вы пытались решить проблему с клейкой лентой?

Попробуйте определить, когда возникают ошибки, и исправьте их короткими операторами if, это не очень, но для некоторых проблем это единственное решение, и это один из них .

 if( (n * 0.1) < 100.0 ) { return n * 0.1 - 0.000000000000001 ;}
                    else { return n * 0.1 + 0.000000000000001 ;}    

У меня была такая же проблема в проекте научной симуляции в c #, и я могу сказать вам, что если вы проигнорируете эффект бабочки, он превратится в большого толстого дракона и укусит вас в a **

24
задан Utku Dalmaz 5 May 2016 в 00:24
поделиться

9 ответов

Если вы все еще видите черную полосу под своей скрытой вкладкой, пытаетесь ли вы выбрать Расширить края под непрозрачными барами здесь?

Убедитесь, что Under Bottom Bars все еще выбран. Надеюсь, это поможет!

40
ответ дан Smnd 25 August 2018 в 19:51
поделиться

Swift 3:

extension UITabBarController {
    func setTabBarVisible(visible:Bool, duration: TimeInterval, animated:Bool) {
        if (tabBarIsVisible() == visible) { return }
        let frame = self.tabBar.frame
        let height = frame.size.height
        let offsetY = (visible ? -height : height)

        // animation
        UIViewPropertyAnimator(duration: duration, curve: .linear) {
            self.tabBar.frame.offsetBy(dx:0, dy:offsetY)
            self.view.frame = CGRect(x:0,y:0,width: self.view.frame.width, height: self.view.frame.height + offsetY)
            self.view.setNeedsDisplay()
            self.view.layoutIfNeeded()
        }.startAnimation()
    }

    func tabBarIsVisible() ->Bool {
        return self.tabBar.frame.origin.y < UIScreen.main.bounds.height
    }
}

Для использования (если, например, self является UITabBarController):

self.setTabBarVisible(visible: false, duration: 0.3, animated: true)

Swift 2.x:

extension UITabBarController {
    func setTabBarVisible(visible:Bool, duration: NSTimeInterval, animated:Bool) {
        if (tabBarIsVisible() == visible) { return }
        let frame = self.tabBar.frame
        let height = frame.size.height
        let offsetY = (visible ? -height : height)

        // animation
        UIView.animateWithDuration(animated ? duration : 0.0) {
            self.tabBar.frame = CGRectOffset(frame, 0, offsetY)
            self.view.frame = CGRectMake(0, 0, self.view.frame.width, self.view.frame.height + offsetY)
            self.view.setNeedsDisplay()
            self.view.layoutIfNeeded()
        }
    }

    func tabBarIsVisible() ->Bool {
        return self.tabBar.frame.origin.y < UIScreen.mainScreen().bounds.height
    }
}

Для использования:

self.tabBarController?.setTabBarVisible(visible: false, duration: 0.3, animated: true)
25
ответ дан Alessandro Ornano 25 August 2018 в 19:51
поделиться

Да. Вы можете скрыть панель вкладок, когда вы нажимаете для просмотра контроллера. Вы можете показать панель вкладок в своем доме. Вы можете скрыть панель вкладок, когда вы нажимаете на следующий контроллер View.

См. Скрыть панель Botton на Push после изображения и установить во всех диспетчерах просмотра, где вы не хотите панель вкладок.

Надеюсь, что это поможет ..

2
ответ дан Balaji Ramakrishnan 25 August 2018 в 19:51
поделиться

Для тех, кто хочет сделать все программно, добавьте эту строку в метод init для ViewController, который не должен иметь tabBar:

hidesBottomBarWhenPushed = true
1
ответ дан budidino 25 August 2018 в 19:51
поделиться

Этот код работает на iOS 10, 11 и iPhone X (включая симуляторы), чтобы показать / скрыть tabBar. Я создал его несколько лет (временные рамки iOS 7?), И с тех пор он работал надежно.

Он отлично работает на iPhone X, пока контент контента в вашем childViewControllers (в закладках) прикреплен к topLayoutGuide, bottomLayoutGuide или SafeArea, а не к стенам основного вида. Тогда все работает. Наслаждайтесь!

@interface UITabBarController (HideTabBar)
@property (nonatomic, getter=isTabBarHidden) BOOL tabBarHidden;
-(void)setTabBarHidden:(BOOL)hidden animated:(BOOL)animated;
@end

@implementation UITabBarController (HideTabBar)
-(BOOL)isTabBarHidden
{
    CGRect viewFrame = self.view.frame;
    CGRect tabBarFrame = self.tabBar.frame;
    return tabBarFrame.origin.y >= viewFrame.size.height;
}

-(void)setTabBarHidden:(BOOL)hidden
{
    [self setTabBarHidden:hidden animated:NO];
}

-(void)setTabBarHidden:(BOOL)hidden animated:(BOOL)animated
{
    BOOL isHidden = self.tabBarHidden;    
    if(hidden == isHidden)return;

    UIView *transitionView = [[[self.view.subviews reverseObjectEnumerator] allObjects] lastObject];
    if(transitionView == nil) {
        NSLog(@"UITabBarCategory can't get the container view");
        return;
    }    
    CGRect viewFrame = self.view.bounds;
    CGRect tabBarFrame = self.tabBar.frame;
    CGRect containerFrame = transitionView.frame;
    CGRect selectedVCFrame = containerFrame;

    tabBarFrame.origin.y = viewFrame.size.height - (hidden ? 0 : tabBarFrame.size.height);
    containerFrame.size.height = viewFrame.size.height - (hidden ? 0 : tabBarFrame.size.height);
    if([self.moreNavigationController.viewControllers containsObject:self.selectedViewController]) {
        selectedVCFrame = self.selectedViewController.view.frame;
        selectedVCFrame.size.height += hidden ? tabBarFrame.size.height : -tabBarFrame.size.height;
    }
    self.selectedViewController.view.frame = selectedVCFrame;

    [UIView animateWithDuration:.5 animations:^{
        self.tabBar.frame = tabBarFrame;
        transitionView.frame = containerFrame;
        [self.selectedViewController.view setNeedsLayout];
    }];
}
@end

Использование - я вызываю его в viewController при таких событиях вращения:

-(void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation
{
    [super didRotateFromInterfaceOrientation:fromInterfaceOrientation];

    // Hide TabBar on iPhone, iPod Touch
    if([UIDevice currentDevice].userInterfaceIdiom != UIUserInterfaceIdiomPad) {
        if(_startDateEditor.editing) return;
        if(fromInterfaceOrientation == UIInterfaceOrientationPortraitUpsideDown || fromInterfaceOrientation == UIInterfaceOrientationPortrait)
            [self.tabBarController setTabBarHidden:YES animated:YES];
        else
            [self.tabBarController setTabBarHidden:NO animated:YES];
    }
}
0
ответ дан Cliff Ribaudo 25 August 2018 в 19:51
поделиться

ПРИМЕЧАНИЕ. Это решение состоит в том, чтобы просто удалить пустое пространство после скрытия панели вкладок.

Для скрытия панели вкладок лучшее решение - @Michael Campsall ответ здесь

Самое простое решение - изменить вид (в моем случае его tableView ) нижние ограничения, вместо того, чтобы давать нижние ограничения с помощью BottomLayoutGuide, дают его с надписью. Скриншоты прилагаются для справки.

Ограничения, показанные ниже скриншотами, создают проблему, изменяя ее согласно следующему снимку экрана.

Фактический ограничения для удаления пробелов должны соответствовать этому (ниже) снимку экрана.

3
ответ дан Community 25 August 2018 в 19:51
поделиться

Иногда самый простой способ - просто добавить представление, использующее границы UIScreen.

let whiteView = UIView()
    whiteView.backgroundColor = .white
    view.addSubview(whiteView)
    whiteView.translatesAutoresizingMaskIntoConstraints = false
    whiteView.topAnchor.constraint(equalTo: view.topAnchor).isActive = true
    whiteView.leftAnchor.constraint(equalTo: view.leftAnchor).isActive = true
    whiteView.rightAnchor.constraint(equalTo: view.rightAnchor).isActive = true
    whiteView.heightAnchor.constraint(equalToConstant: UIScreen.main.bounds.height).isActive = true

Иногда иногда края обзора выходят за пределы панели навигации, что дает вам новые проблемы, если вы расширяете макет представления.

1
ответ дан Itumeleng Mabote 25 August 2018 в 19:51
поделиться

После просмотра скриншота в комментарии. Я думаю, вы можете попробовать установить hidesBottomBarWhenPushed в true.

hidesBottomBarWhenPushed = true

Или раскадровка.

Он скроет когда вы переместились в другой контроллер представления и снова появляетесь при возврате.

20
ответ дан JZAU 25 August 2018 в 19:51
поделиться

Мой предпочтительный способ сделать это - использовать контроллер упаковки. Если я хочу скрыть панель вкладок, я просто увеличиваю высоту контроллера панели вкладок, таким образом эффективно панель вкладок перемещается из экрана.

С помощью этого решения вам не нужно взламывать вкладку бара, и вы не зависите от анимации push-контроллера навигации:

import UIKit

class ViewController: UIViewController {
    let tabController: UITabBarController = {
        let tabController = UITabBarController()
        // setup your tabbar controller here

        return tabController;
    }()

    var tabbarHidden = false {
        didSet {
            var frame = self.view.bounds;

            if (tabbarHidden) {
                frame.size.height += self.tabController.tabBar.bounds.size.height;
            }

            self.tabController.view.frame = frame;
        }
    }

    override func viewDidLoad() {
        super.viewDidLoad()

        // add the tab controller as child controller
        addChildViewController(self.tabController)
        self.tabController.view.frame = self.view.bounds
        self.tabController.view.autoresizingMask = [.FlexibleWidth, .FlexibleHeight]
        self.view.addSubview(self.tabController.view)
        self.tabController.didMoveToParentViewController(self)

        // for debugging
        let tapRecognizer = UITapGestureRecognizer(target: self, action: #selector(switchTabbar))
        self.tabController.view.addGestureRecognizer(tapRecognizer)
    }

    override func childViewControllerForStatusBarStyle() -> UIViewController? {
        return self.tabController
    }

    override func childViewControllerForStatusBarHidden() -> UIViewController? {
        return self.tabController
    }

    func switchTabbar() {
        UIView.animateWithDuration(0.3) {
            self.tabbarHidden = !self.tabbarHidden
        }
    }
}

2
ответ дан Sulthan 25 August 2018 в 19:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: