在导航栏下添加进度条

我是iOS开发新手。

我想知道是否在iOS 7中发送邮件时, UINavigationBar ,其标题为:发送,有一个进度条正在加载,直到消息成功发送。

我的问题是:

  1. 这个酒吧是一个进度条吗?

  2. 在iOS 6中,进度条在UINavigationBar

有人可以给我一些关于如何在iOS 7和iOS6上创build的想法吗?

我还没有尝试过任何东西。 我想阅读一些教程或这类问题的例子。

这是我的代码:

int progress = 50;

  CGRect navframe = [[self.navigationController navigationBar] frame]; int height= navframe.size.height; sendView = [[UIView alloc] init]; sendView.frame = CGRectMake(0, 0, 200, 30); sendView.backgroundColor = [UIColor clearColor]; UILabel* lbl = [[UILabel alloc] init]; lbl.frame = CGRectMake(0,0, 200, 15); lbl.backgroundColor = [UIColor clearColor]; lbl.textColor = [UIColor whiteColor]; lbl.shadowColor = [UIColor colorWithWhite:0 alpha:0.3]; lbl.shadowOffset = CGSizeMake(0, -1); lbl.font = [UIFont boldSystemFontOfSize:12]; lbl.text = @""; lbl.textAlignment = UITextAlignmentCenter; [sendView addSubview:lbl]; UIProgressView* pv = [[UIProgressView alloc] initWithProgressViewStyle:UIProgressViewStyleBar]; pv.frame = CGRectMake(0, 30-pv.frame.size.height, 200, pv.frame.size.height); pv.progress = progress/100.0; [sendView addSubview:pv]; [self.navigationController.navigationBar addSubview:sendView]; 

不妥当的进度条不在navigationController下。 为什么?

我在我的iOS应用程序中做的是创build并添加一个UIProgressBar作为导航栏的子视图,告诉它[progressBar setTranslatesAutoresizingMaskIntoConstraints:NO] ,并添加约束将其左右拖动到该栏,其底部导航栏的底部。 导航控制器维护一个ivar,并提供公开的方法来显示/隐藏它,并设置它的值。 看起来就像Safari内容下载一样。

编辑:这里是代码来创build并将其添加到导航栏:

 // in UINavigationController subclass - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. UIProgressView *progress = [[UIProgressView alloc] initWithProgressViewStyle:UIProgressViewStyleBar]; progress.tag = DISPLAY_PROGRESS_VIEW; [self.view addSubview:progress]; UINavigationBar *navBar = [self navigationBar]; NSLayoutConstraint *constraint; constraint = [NSLayoutConstraint constraintWithItem:progress attribute:NSLayoutAttributeBottom relatedBy:NSLayoutRelationEqual toItem:navBar attribute:NSLayoutAttributeBottom multiplier:1 constant:-0.5]; [self.view addConstraint:constraint]; constraint = [NSLayoutConstraint constraintWithItem:progress attribute:NSLayoutAttributeLeft relatedBy:NSLayoutRelationEqual toItem:navBar attribute:NSLayoutAttributeLeft multiplier:1 constant:0]; [self.view addConstraint:constraint]; constraint = [NSLayoutConstraint constraintWithItem:progress attribute:NSLayoutAttributeRight relatedBy:NSLayoutRelationEqual toItem:navBar attribute:NSLayoutAttributeRight multiplier:1 constant:0]; [self.view addConstraint:constraint]; [progress setTranslatesAutoresizingMaskIntoConstraints:NO]; progress.hidden = YES; } 

我已经为iOS 9和更高版本创build了这个简单的UINavigationBar类,它将做你想要的:

UINavigationBar的+ MH.h

 #import <UIKit/UIKit.h> @interface UINavigationBar (MH) @property (strong, nonatomic, readonly) UIProgressView *mh_progressView; @end 

UINavigationBar的+ MH.m

 #import "UINavigationBar+MH.h" #import <objc/runtime.h> @implementation UINavigationBar (MH) - (UIProgressView *)mh_progressView{ // find prev instance UIProgressView *progress = objc_getAssociatedObject(self, "mh_progressView"); if(!progress){ progress = [UIProgressView.alloc initWithProgressViewStyle:UIProgressViewStyleBar]; [self addSubview:progress]; // pin to bottom [progress.leadingAnchor constraintEqualToAnchor:self.leadingAnchor].active = YES; [progress.trailingAnchor constraintEqualToAnchor:self.trailingAnchor].active = YES; [progress.bottomAnchor constraintEqualToAnchor:self.bottomAnchor].active = YES; progress.translatesAutoresizingMaskIntoConstraints = NO; // remember it objc_setAssociatedObject(self, "mh_progressView", progress, OBJC_ASSOCIATION_RETAIN_NONATOMIC); } return progress; } @end 

在viewDidLoad或更高版本的视图控制器中,只需执行以下操作:

 self.navigationController.navigationBar.mh_progressView.value = 0.5; 

它看起来就像在Safari中一样。 因为它在导航栏上,即使用户导航到不同的屏幕,它也会继续显示,对于像文件上载或同步这样的全局任务来说非常出色。

可能迟到了,但希望它能帮助别人….

我用M13ProgressSuite相同的目的..

对于iOS 6:使用进度条和UIlabel创build一个自定义UIView,然后将其设置为视图控制器导航项的titleView属性。

对于iOS 7:添加UIProgressBar正下方的导航项目导航栏。