【问题标题】:How to center a UILabel on UIView如何在 UIView 上将 UILabel 居中
【发布时间】:2011-07-19 20:36:43
【问题描述】:

如何将 UILabel 置于 UIView 的中心?我正在使用以下代码

float width = weatherView.bounds.size.width; 
float height = weatherView.bounds.size.height; 

[self.label setFrame:CGRectMake(width-100,height-100, 100, 100)];

【问题讨论】:

    标签: ios uiview uilabel


    【解决方案1】:

    怎么样:

    [self.label setCenter:view.center];
    

    【讨论】:

    • 有效,但如果标签很长,则它不会居中。它要么向左要么向右。我认为定位是由 uilabel 的中心点确定的。
    • 好吧...只有当标签和视图是同一视图的子视图时。如果标签是视图的子视图,则必须忽略位置,只考虑边界。
    • 我使用界面设计器(拖放)添加了 UILabel。这是否意味着它是视图的子视图,我应该使用边界。
    • self.contentView.center
    • 这让我label.center.y = view.center.y 仅将 y 轴居中。对此点赞。
    【解决方案2】:

    如果标签是视图的子视图:

    [self.label setCenter:CGPointMake(view.frame.size.width / 2, view.frame.size.height / 2)]
    

    不要使用view.center,除非标签和视图具有相同的超级视图。

    如果没有直接连接,则必须将视图的中心转换为标签父级的坐标空间。然后,您可以将 PengOne 的答案与转换点一起使用。

    【讨论】:

      【解决方案3】:

      如果您拥有的是已设置的标签并且您希望将其内容居中,请使用 NSTextAlignmentCenter。

      cell.menuLabel.textAlignment = NSTextAlignmentCenter;
      

      【讨论】:

      • 这是最好的答案,将标签框居中并不足以使文本居中,如果您的标签已本地化,则非常有用!
      • 我认为这可能是 OP 想要做的唯一正确答案。这是我想做的。
      【解决方案4】:

      更好的可能解决方案是:

      首先:如果您以编程方式执行此操作,则需要使用框架和一些自定义项进行初始化:

      // Simple example
      int yPosition = 10;
      UILabel *label = [[UILabel alloc] initWithFrame: CGRectMake(0, yPosition, self.view.frame.size.width, 0)];
      [label setText: @"Testing..."];
      [label setBackgroundColor: [UIColor clearColor]];
      [label setNumberOfLines: 0];
      [label sizeToFit];
      

      第二:如果一个标签是你想要居中的,你可以在调用setNumberOflines选择器并分配0 value之后运行它,你的文本将包含所有需要的行,并且sizeToFit调用方法进行良好的自定义,最后:

      [self.label setCenter: CGPointMake(self.view.center.x, self.label.center.y)];
      

      这将使only the X axis居中,Y axis 将在框架初始化中保持您想要的状态。

      PS:如果不是UILabel,它也有效,但取决于您使用的控件是否需要另一个简单的自定义,如果您只想以编程方式居中但interface builder 设计,只需要运行second code

      【讨论】:

      • self.view.frame.width 应该是self.view.frame.size.width
      【解决方案5】:

      PengOne / Alex Lockwood 的回答简单实用。如果您打算支持旋转,请添加以下内容以使其居中:

      [self.myLabel setAutoresizingMask:UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleWidth];
      

      【讨论】:

        【解决方案6】:

        这样的事情应该可以解决问题... 确保您的标签设置为居中对齐,并且足够大/宽以处理您的文本字符串。

        float viewWidth = weatherView.frame.size.width;
        float viewHeight = weatherView.frame.size.height;
        float labelWidth = label.frame.size.width;
        float labelHeight = label.frame.size.height;
        
        float xpos = (viewWidth/2.0f) - (labelWidth/2.0f);
        float ypos = (viewHeight/2.0f) - (labelHeight/2.0f);
        
        [label setFrame:CGRectMake(xpos,ypos,labelWidth,labelHeight)];
        

        我认为这应该满足您的要求。

        【讨论】:

        • 我不知道标签的大小,因此我使用的是 siteToFit 方法。
        • 上面的代码应该仍然可以工作,只要你在标签上进行任何初始化之后调用它
        【解决方案7】:

        如果您的 UILabel 是通过 .xib 添加或以编程方式添加,则有两种可能性。

        如果第一种情况,即通过 .xib 添加,那么您可以使用“排列”属性从 xib 文件大小检查器选项卡设置位置

        如果第二种情况仍然存在,那么您可以设置为 --- [self.label setCenter:view.center];

        【讨论】:

          猜你喜欢
          • 2015-05-07
          • 2016-07-16
          • 2020-05-21
          • 1970-01-01
          • 2016-04-11
          • 1970-01-01
          • 2020-12-30
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多