gpt4 book ai didi

ios - UISegmentedControl 中的两行文本

转载 作者:可可西里 更新时间:2023-11-01 03:29:36 25 4
gpt4 key购买 nike

尽我所能,我无法解决 iOS7 iPhone 应用程序的 UISegmentedControl 错误。

当我创建分段控件时,我使用了这段代码:

NSArray *segmentedControlItemArray = [NSArray arrayWithObjects: @"Nominal:\n27 inch", @"Actual:\n700c x 23mm", @"Actual:\n700c x 20mm", nil];
_wheelDiameterSegmentedControl = [[UISegmentedControl alloc] initWithItems:segmentedControlItemArray];
_wheelDiameterSegmentedControl.frame = CGRectMake(0, 102, 290, 50);
_wheelDiameterSegmentedControl.selectedSegmentIndex = 0;
_wheelDiameterSegmentedControl.tintColor = [UIColor colorWithRed:0.35 green:0.4 blue:0.9 alpha:1.0];

for (id segment in [_wheelDiameterSegmentedControl subviews]) {
for (id label in [segment subviews]) {
if ([label isKindOfClass:[UILabel class]]) {
UILabel *titleLabel = (UILabel *) label;
titleLabel.numberOfLines = 0;
}
}
}

[_wheelDiameterSegmentedControl addTarget:self
action:@selector(pickOne:)
forControlEvents:UIControlEventValueChanged];

[_wheelDiameterMenuContainer addSubview:_wheelDiameterSegmentedControl];

遗憾的是,我不能发布图片,或者我会向您展示我想要的控件的图片:UISegmented 控件中的每个段都有两行文本,换行符正好在我要求的位置.

不过,在旋转时,我想保持分段控件的全角,而换行符在那么宽的分段中看起来很傻。因此,在 willAnimateRotationToInterfaceOrientation 中,我包含了以下代码,字符串中没有换行符:

    [_wheelDiameterSegmentedControl setFrame:CGRectMake(0, 102, 450, 50)];
[_wheelDiameterSegmentedControl setTitle:@"Nominal: 27 inch" forSegmentAtIndex:0];
[_wheelDiameterSegmentedControl setTitle:@"Actual: 700c x 23mm" forSegmentAtIndex:1];
[_wheelDiameterSegmentedControl setTitle:@"Actual: 700c x 20mm" forSegmentAtIndex:2];

再一次,如果我可以插入图像,我会向您展示我想要的图像:一个宽的 UISegmented 控件,标签中没有换行符(每个标签 1 行文本)。

这就是我遇到麻烦的地方。当我旋转回纵向时,我的选择似乎是:

1 行标签文本,被截断,格式为

“实际:7...”

当我刚刚使用重置 UISegmentedControl 的大小时

[_wheelDiameterSegmentedControl setFrame:CGRectMake(0, 102, 290, 50)];

2 行标签文本,被截断,格式为

“实际:
700c x ...”

当我重置大小并重置字符串值并重新运行将标签的 numberOfLines 设置为 2 的代码循环时,使用

    NSArray *segmentedControlItemArray = [NSArray arrayWithObjects: @"Nominal:\n27 inch", @"Actual:\n700c x 23mm", @"Actual:\n700c x 20mm", nil];

[_wheelDiameterSegmentedControl setTitle:[segmentedControlItemArray objectAtIndex:0] forSegmentAtIndex:0];
[_wheelDiameterSegmentedControl setTitle:[segmentedControlItemArray objectAtIndex:1] forSegmentAtIndex:1];
[_wheelDiameterSegmentedControl setTitle:[segmentedControlItemArray objectAtIndex:2] forSegmentAtIndex:2];
for (id segment in [_wheelDiameterSegmentedControl subviews]) {
for (id label in [segment subviews]) {
if ([label isKindOfClass:[UILabel class]]) {
UILabel *titleLabel = (UILabel *) label;
titleLabel.numberOfLines = 2;
}
}
}
[_wheelDiameterSegmentedControl setFrame:CGRectMake(0, 102, 290, 50)];

3行标签文字,格式

“实际:
700摄氏度
20毫米"

这是我将上面的强制 numberOfLines = 2 替换为最初设置 UISegmentedControl 时起作用的 numberOfLines = 0 时得到的结果。

我想要的是我创建控件时得到的,也就是

“实际:
700c x 20mm"

但无论我尝试了什么(将字符串和 numberOfLines 代码放入 willRotateToInterfaceOrientation 或 didRotateFromInterfaceOrientation;在更改文本之前重新设置 UISegmentedControl 的框架;在更改文本后重新设置框架...),我无法取回漂亮、整洁的两行标签。我在这里错过了什么?

最佳答案

啊哈!操作系统在旋转时处理标签大小的方式与在创建标签时处理标签的方式不同。所以我强制标签框架的大小,使用

for (id segment in [_wheelDiameterSegmentedControl subviews]) {

for (id label in [segment subviews]) {

if ([label isKindOfClass:[UILabel class]]) {

UILabel *titleLabel = (UILabel *) label;

//inserting line here, to make the frame behave nicely:
//
titleLabel.frame = CGRectMake(0, 0, 97, 50);
//
//continuing as before

titleLabel.numberOfLines = 0;

}
}
}

现在它完全按照我想要/期望的方式显示。万岁!


如果您只是想在您的 UISegmentedControl 中获取两行(或更多)文本。使用赫兹安的惊人技术!这只是另一个代码示例,可能会帮助人们...

self.yourSlider .. set the height manually (can't easily do it in XIB)
// now use amazing Herzian technology...
for (id segment in [self.yourSlider subviews])
for (id label in [segment subviews])
{
if ([label isKindOfClass:[UILabel class]])
{
UILabel *titleLabel = (UILabel *) label;
titleLabel .. set the width to say 80, per your layout;
(the width us typically too low)
titleLabel.numberOfLines = 0;
}
}

再次感谢您。

关于ios - UISegmentedControl 中的两行文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19868284/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com