【问题标题】:Is there a way to set the subclass CGPoint in itself?有没有办法自己设置子类 CGPoint ?
【发布时间】:2018-03-23 04:08:14
【问题描述】:

UILabel有一个子类叫NewLabel,它会显示在很多UIViewController中,比如

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里面?有什么想法吗?

【问题讨论】:

    标签: ios objective-c uiviewcontroller uilabel


    【解决方案1】:

    您可以在 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]
    

    【讨论】:

    • 非常感谢。
    【解决方案2】:

    看起来你在这里尝试做两件事:

    1) 为标签设置一个固定大小。 2) 在其父视图中居中标签。

    我会分别处理这两件事。

    对于第一个(设置大小),这取决于目的。 (120, 40) 对我来说感觉很随意。如果文本长度超过 120 像素,使用不同的语言怎么办?如果我想在设置中增加 iOS 字体大小并且它变得高于 40 像素怎么办?如果我在分屏中缩小屏幕怎么办?如果您不确定,也许使用sizeToFit 或自动布局是一种解决方案。如果您完全确定大小,可能会将其移至 NewLabel 的 intrinsic content size

    为了使标签居中,它是自动布局的完美用例。 See this answer。该解决方案可以提取为像centerViewInSuperview 这样的实用方法。

    对此的另一个解决方案是将位于中心的标签的整个概念实际提取到一个单独的 UIView 中,该 UIView 在中间包含该标签。然后在您的代码中,您将改用该视图,并将其填充到整个视图控制器的视图中(还可以添加将其边框附加到父边框的约束,以用于调整旋转大小等情况)。

    【讨论】:

      猜你喜欢
      • 2011-08-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-30
      • 1970-01-01
      • 2019-09-10
      • 2016-03-07
      • 1970-01-01
      相关资源
      最近更新 更多