iOS 7.1 中以编程方式创建的 UIProgressView 的高度被忽略(始终为 2)
Posted
技术标签:
【中文标题】iOS 7.1 中以编程方式创建的 UIProgressView 的高度被忽略(始终为 2)【英文标题】:Height of programmatically created UIProgressView is ignored in iOS 7.1 (always 2) 【发布时间】:2014-03-25 20:25:40 【问题描述】:以编程方式将 UIProgressView 添加到视图会忽略 size.height 值,这显然是由于 NSAutoresizingMaskLayoutConstraint 始终为 2。除了增加高度之外,关于 UIProgressView 的其他所有内容都是标准的。一段代码 sn-p where progressViewFrame.size.height = 40.0:
self.progressView = [[UIProgressView alloc] init];
// initWithFrame produces the same issue
[self.progressView setFrame:progressViewFrame];
[self addSubview:self.progressView];
导致标准高度为 2。
强制附加高度 40.0 约束:
[self addConstraint:[NSLayoutConstraint
constraintWithItem: self.progressView
attribute: NSLayoutAttributeHeight
relatedBy: NSLayoutRelationEqual
toItem: nil
attribute: NSLayoutAttributeNotAnAttribute
multiplier: 1.0
constant: 40.0]];
通过报告以下(预期的)冲突来说明问题:
(
"<NSLayoutConstraint:0x16d74b70 V:[UIProgressView:0x16d72800(40)]>",
"<NSAutoresizingMaskLayoutConstraint:0x16d69e60 h=--& v=--& V:[UIProgressView:0x16d72800(2)]>"
)
这似乎与在 IB 中使用 40.0 高度约束创建更高的 UIProgressView 有关,这会生成 Expected: height=40 Actual: height=2 警告(但显示正确)。
这些问题出现在 ios 7.1 中,我正在为上面的程序化 UIProgressView 案例寻找解决方案。我不担心 7.0 之前的 iOS 版本,我希望尽可能少地破解标准的默认 UIProgressView。 (我只是想让它更高。)
提前感谢您的任何建议。
【问题讨论】:
【参考方案1】:看来唯一可行的策略是完全使用 LayoutConstraints 来消除问题。这是我最终使用的(感谢 John Griffith 的建议):
self.progressView = [[UIProgressView alloc] init];
self.progressView.translatesAutoresizingMaskIntoConstraints = NO;
[self addSubview: self.progressView];
NSDictionary *views = @@"progressview": self.progressView;
NSDictionary *metrics = @@"height": @(progressBarHeight),
@"margin": @(horizontalMargin),
@"bottomspace": @(bottomMargin);
[self addConstraints:[NSLayoutConstraint
constraintsWithVisualFormat: @"H:|-(margin)-[progressview]-(margin)-|"
options: 0
metrics: metrics
views: views]];
[self addConstraints:[NSLayoutConstraint
constraintsWithVisualFormat: @"V:[progressview(height)]-(bottomspace)-|"
options: 0
metrics: metrics
views: views]];
【讨论】:
以上是关于iOS 7.1 中以编程方式创建的 UIProgressView 的高度被忽略(始终为 2)的主要内容,如果未能解决你的问题,请参考以下文章
如何在 ios swift 中以编程方式创建自动布局等宽约束?
如何在ios swift中以编程方式创建自动布局等宽度约束?