当字符长度发生变化时,保持 UILabel 在 UIView 中居中。 iOS,目标 C

Posted

技术标签:

【中文标题】当字符长度发生变化时,保持 UILabel 在 UIView 中居中。 iOS,目标 C【英文标题】:Keep UILabel centered in UIView when character lengths change. iOS, Objective C 【发布时间】:2014-03-13 12:38:59 【问题描述】:

我有一个UILabel,它位于屏幕中间。数值最多可以包含三位数字。例如 500。

我的问题是,当值发生变化时,它会使UILabel 位置偏离中心。

在下图中,您将看到当值等于 3 位时,滑块标签看起来居中,而当滑块标签值为 12 时,标签看起来偏离中心。

我需要 UILabel 将自身调整为始终位于 UIView 的中心。

我尝试将下面的代码添加到我的UILabel,但没有成功。

self.myCircleSliderValueLabel.font = sliderValueFont;
self.myCircleSliderValueLabel.textColor = [UIColor colorWithRed:103/255.0 green:187/255.0 blue:230/255.0 alpha:1.0];;
self.myCircleSliderValueLabel.numberOfLines = 0;
self.myCircleSliderValueLabel.lineBreakMode = NSLineBreakByWordWrapping;
self.myCircleSliderValueLabel.text = @"400";
[self.myCircleSlider addSubview:self.myCircleSliderValueLabel];

self.myCircleSliderValueLabel.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleLeftMargin |  UIViewAutoresizingFlexibleRightMargin; 

【问题讨论】:

设置自动布局约束以使标签居中,然后在更新文本时调用 sizeToFit。然后标签应该居中。 【参考方案1】:

最简单、最快的方法是为您的myCircleSliderValueLabel 设置固定宽度(以容纳所有三个数字)并将textAlignment 属性设置为NSTextAlignmentCenter

已编辑:

或者您可以使用自动布局。像这样的......

NSLayoutConstraint *con = [NSLayoutConstraint
  constrainWithItem:self.myCircleSliderValueLabel
  attribute:NSLayoutAttributeCenterX             // It says that X center
  relatedBy:NSLayoutRelationEqual                // Should equal
  toItem:self.myCircleSliderValueLabel.superview // To your label superview's...
  attribute:NSLayoutAttributeCenterX             // ... X center
  multiplier:1.0
  constant:0.0];

【讨论】:

【参考方案2】:

你试过 textAlignment = NSTextAlignmentCenter 吗?

【讨论】:

这更像是评论而不是答案

以上是关于当字符长度发生变化时,保持 UILabel 在 UIView 中居中。 iOS,目标 C的主要内容,如果未能解决你的问题,请参考以下文章

Autolayout UILabel 高度在第二个视图外观上发生变化

Xcode 11 Beta 中字体样式发生变化的问题

带有 UILabel 内容的 UITableViewCell 在滚动时发生变化

当 graphql 变量的状态发生变化时,react-native 上的结果保持不变

使用 AutoLayout,当导航栏消失时,如何将 UILabel 保持在同一位置?

apache在发布请求时返回403错误,输入变量计数保持不变,值发生变化