UILabel的子类名为NewLabel,它将在很多UIViewControllers中显示,例如
NewLabel *label = [[NewLabel alloc] init];
CGSize size = CGSizeMake(120.0f, 40.0f);
CGPoint point = CGPointMake(self.view.bounds.size.width / 2, self.view.bounds.size.height / 2);
label.frame = CGRectMake(0, 0, size.width, size.height);
label.center = point;
[self.view addSubview:label];
在每个UIViewController中,我需要放置这些代码,我可以压缩代码,并将一些放在子类NewLabel
中吗?有什么想法吗?
答案 0 :(得分:0)
您可以在NewLabel类或其他类中创建一些具有下一个结构的静态工厂方法:
+ (NewLabel*)addLabelIntoView:(UIView*)view
{
NewLabel *label = [[NewLabel alloc] init];
CGSize size = CGSizeMake(120.0f, 40.0f);
CGPoint point = CGPointMake(view.bounds.size.width / 2, view.bounds.size.height / 2);
label.frame = CGRectMake(0, 0, size.width, size.height);
label.center = point;
[view addSubview:label];
return label;
}
添加标签只是调用此方法:
<....>
self.label = [NewLabel addLabelIntoView:self.view]
答案 1 :(得分:0)
看起来你在这里尝试做两件事:
1)为标签设置一个恒定的大小。 2)将标签置于其超级视图中。
我会分别处理这两件事。
对于第一个(设置大小),它取决于目的。 (120,40)对我来说很随意。如果文本在不同语言中超过120px怎么办?如果我想在设置中增加iOS字体大小并且它变得高于40px怎么办?如果我在分屏中缩小屏幕怎么办?如果您不确定,可能使用sizeToFit或自动布局是一种解决方案。如果您完全确定大小,可能会将其移至NewLabel的intrinsic content size。
对于标签居中,它是自动布局的完美用例。 See this answer。此解决方案可以作为实用方法提取,如centerViewInSuperview
。
另一种解决方案是将位于中心的标签的整个概念实际提取到单独的UIView中,该UIView在中间包含该标签。然后在您的代码中,您将使用该视图,并将其填充到整个视图控制器的视图中(还可以添加将其边框附加到父边框的约束,以用于调整旋转时的大小)。