2015-02-12 66 views
0

鉴于以下图像:定位UIView里面的UIView

三个标签:“今日,平均,最后一周”动态定位在我的ViewController。当应用程序部署到其他设备(如iPhone 6 Plus)时,如果它们没有正确定位,这会成为问题。

我知道能够使用AutoLayout,但我想正确使用用于生成3个活动栏的库来定位它们。

我正在使用的库是:CHCircleGauge

我尝试将下列内容添加到此库中,但不确定使用哪种约束来将它们放置在此图像中的位置。

enter image description here

这是我使用迄今的代码,其中是所使用来定位标签“6小时”水平和垂直方向为中心的same code

NSDictionary *valueLabelDictionary = @{@"valueText" : self.valueTextLabel}; 
[self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[valueText]|" options:0 metrics:nil views:valueLabelDictionary]]; 
[self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[valueText]|" options:0 metrics:nil views:valueLabelDictionary]]; 

我只是简单地添加了以下内容,至少可以在动态约束条件下使用,并且可以成功地将标签放置在相同的位置。但问题是我不太清楚如何像上图一样完美地定位它们。

NSDictionary *titleLabelDictionary = @{@"titleText" : self.titleTextLabel}; 
[self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[titleText]|" options:0 metrics:nil views:titleLabelDictionary]]; 
[self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[titleText]|" options:0 metrics:nil views:titleLabelDictionary]]; 

enter image description here

任何帮助将不胜感激。我仍然试图让我的头像如何AutoLayout和约束的工作。

UPDATE:

为了显示三个环我使用下面的:

var barView1 = CHCircleGaugeView(frame: CGRectMake(0, 0, 245, 245)) 
barView1.center = CGPointMake(self.gaugeView.frame.size.width/2, self.gaugeView.frame.size.height/2) 
barView1.gaugeWidth = 16 
barView1.gaugeTintColor = UIColor(red: 255/255, green: 202/255, blue: 76/255, alpha: 1) 
barView1.trackWidth = barView1.gaugeWidth 
barView1.trackTintColor = UIColor(red: 255/255, green: 202/255, blue: 76/255, alpha: 0.1) 
self.gaugeView.addSubview(barView1) 
barView1.setValue(0.10, animated: true) 

然后,我只是增加两个是更小的尺寸(在gaugeView居中)的配合内更大的戒指。

更新2:

最后我用了一些constant填充如下:

[self addConstraint:[NSLayoutConstraint constraintWithItem:self.titleTextLabel 
               attribute:NSLayoutAttributeTop 
               relatedBy:NSLayoutRelationEqual 
                toItem:self 
               attribute:NSLayoutAttributeTop 
               multiplier:1.0 
                constant:-9.0]]; 

[self addConstraint:[NSLayoutConstraint constraintWithItem:self.titleTextLabel 
               attribute:NSLayoutAttributeRight 
               relatedBy:NSLayoutRelationEqual 
                toItem:self 
               attribute:NSLayoutAttributeCenterX 
               multiplier:1.0 
                constant:-14.0]]; 
+0

你是否控制每个环的厚度? – 2015-02-12 03:59:23

+0

@AaronBrager:是的,这是通过将对象的'gaugeWidth'和'trackWidth'属性设置为'16'来完成的。 – fuzz 2015-02-12 04:00:52

回答

3

看起来你是新来的汽车的布局,所以我会尽力给你指出正确的方向而不是全部消失。

垂直约束

约束每个标签的Y到环的不是中心的顶部。设置每个标签的顶部约束constant略有不同,因此它们看起来堆叠在一起。 constant应该是trackWidth * (labelIndexNumber)。所以他们最终会得到0,1632

这种方式,如果你改变trackWidth你的标签会自动调整。您可能需要稍微使用我的号码才能获得填充权。

水平约束

约束每个标签到圆图的中心的右侧。我不认为你可以使用VFL来做这件事。您必须使用详细的[NSLayoutConstraint constraintWithItem:…语法。

标签设置

你的标签的文字应该是右对齐。您可能需要增加水平抗压能力,这取决于您的其他视图,但如果可以的话,请避免这种情况。

+0

你所说的一切都是有道理的,我会采取一些措施,看看我是否可以自己动手。我非常感谢你的详细解答。 – fuzz 2015-02-12 04:07:05

+0

@gotnull我看到你删除了你的后续行动。你有工作吗? – 2015-02-12 05:38:17

+0

我用我用过的代码更新了我的问题。它似乎工作正常,但我只是使用了一些填充'常量'的值,因为我无法真正弄清楚你的意思与乘法。 – fuzz 2015-02-12 06:37:11