h34*_*4cr 16 uinavigationbar uitableview uinavigationcontroller uiprogressview ios
我想要一个UIProgressView来显示导航栏底部的进度(就像在iOS 7中发送iMessage或短信一样).但是我在导航控制器的每个表视图视图中都需要这一点.所以对我来说很清楚:我必须将它添加到UINavigationController中.但问题是,不可能将UIProgressView添加到UINavigationController.所以我尝试了两件事:
我尝试以编程方式将其添加到UINavigationController的视图中.但问题是定位UIProgressView并在更改设备旋转时使其看起来很好.
我尝试的第二件事是将UIProgressView添加到每个UITableView,但是我真的必须为每个视图执行此操作.它也不好看,因为它不在导航栏的顶部,而是在它下面.但是我不喜欢第二种解决方案的主要原因是因为ProgressViews带有他们的TableView,所以你没有静态的,而是改变它们.
在此之后,我不知道这样做,所以我问你......有没有人知道如何做到这一点?
它应该是这样的:

Dav*_*d H 12
我重新设计了原始海报的答案,以便该栏实际上就在导航栏内.有趣的是,当它显示时,它与一个像素底线重叠(实际上取代它),所以当你将进度条设置为隐藏时,进度条淡出并且分隔线淡入.关键部分此解决方案是将进度条添加到导航控制器的视图,而不是导航栏.
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view.
UIProgressView *progress = [[UIProgressView alloc] initWithProgressViewStyle:UIProgressViewStyleBar];;
[self.view addSubview:progress];
UINavigationBar *navBar = [self navigationBar];
#if 1
[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:[navBar]-0-[progress]"
options:NSLayoutFormatDirectionLeadingToTrailing
metrics:nil
views:NSDictionaryOfVariableBindings(progress, navBar)]];
[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[progress]|"
options:NSLayoutFormatDirectionLeadingToTrailing
metrics:nil
views:NSDictionaryOfVariableBindings(progress)]];
#else
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];
#endif
[progress setTranslatesAutoresizingMaskIntoConstraints:NO];
[progress setProgress:0.5 animated:NO];
}
Run Code Online (Sandbox Code Playgroud)
我不确定为什么有必要在NSLayoutContstraints代码中添加0.5偏移量来获得相同的匹配,但事实确实如此.我使用的不是视觉格式,而是你的选择.请注意,与底部相反,这也使其无缝旋转.
h34*_*4cr 11
我终于找到了解决方案:
我制作了一个自定义的UINavigationController并将其添加到 viewDidLoad
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view.
progress = [[UIProgressView alloc] init];
[[self view] addSubview:progress];
UIView *navBar = [self navigationBar];
[[self view] addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:[navBar]-[progress(2@20)]"
options:NSLayoutFormatDirectionLeadingToTrailing
metrics:nil
views:NSDictionaryOfVariableBindings(progress, navBar)]];
[[self view] addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[progress]|"
options:NSLayoutFormatDirectionLeadingToTrailing
metrics:nil
views:NSDictionaryOfVariableBindings(progress)]];
[progress setTranslatesAutoresizingMaskIntoConstraints:NO];
[progress setProgress:0 animated:NO];
}
Run Code Online (Sandbox Code Playgroud)
我创建了一个新的UIProgressView(我在声明中@interface)添加了约束来将它定位在导航栏下面(这一步很重要:)设置translatesAutoresizingMaskIntoConstraints为NO.
| 归档时间: |
|
| 查看次数: |
13300 次 |
| 最近记录: |