1

我正在创建一个UISwitchin TableViewCell

在视网膜显示器上看起来不错。

但是当我在 3GS 上构建一个项目时,我UISwitch看起来就像一幅画得很糟糕的画。

http://iwheelbuy.com/stackoverflow/asdf.png

我的代码

{
    ...
    cell.textLabel.text = NSLocalizedString(@"settings model glare", nil);
    UISwitch *cellSwitch = [self switchWithTitle:@"glare"];
    [cellSwitch setCenter:CGPointMake(260.0f, cell.frame.size.height / 2)];
    [cell addSubview:cellSwitch];
    ...
}

- (UISwitch *) switchWithTitle:(NSString *)_title
{
    BOOL switchState;
    if ([[NSUserDefaults standardUserDefaults] boolForKey:_title] == NO)
    {
        [[NSUserDefaults standardUserDefaults] setBool:NO forKey:_title];
        [[NSUserDefaults standardUserDefaults] synchronize];
    }
    switchState = [[NSUserDefaults standardUserDefaults] boolForKey:_title];
    UISwitch *switchForCell = [[UISwitch alloc] initWithFrame:CGRectZero];
    if ([_title isEqualToString:@"glare"])
        [switchForCell addTarget:self action:@selector(changedValueForGlare) forControlEvents:UIControlEventValueChanged];
    else
        [switchForCell addTarget:self action:@selector(changedValueForShadow) forControlEvents:UIControlEventValueChanged];
    [switchForCell setOn:switchState];
    return switchForCell;
}
4

2 回答 2

3

首先,在这种情况下,将开关设置为accessoryView单元格并让它担心定位会更容易。

您看到模糊图像的原因是您的开关框架的原点位于半像素上。您正在设置center开关的,所以它的原点取决于开关的大小(这是固定的,因为UISwitch总是使用系统定义的大小)。假设开关的尺寸为 79 x 27(标准尺寸),将中心的 y 坐标设置为 20 会导致框架原点的 y 坐标为 6.5 (20.0 - 27.0 * 0.5)。

于 2012-11-07T15:23:18.717 回答
2

不知道你所说的“画得不好”是什么意思。是不是看起来很模糊?这可能是因为它的框架没有设置为一个完整的点。

你的细胞高度是多少?以下行可能会导致 UISwitch 设置为 0.5 个点:

[cellSwitch setCenter:CGPointMake(260.0f, cell.frame.size.height / 2)];

这在 Retina 上很好,因为它仍然是一个完整的像素,但在非 Retina 上它是 0.5 个像素(因为点 = 非 Retina 上的像素和点 = Retina 上的 2 个像素)。

于 2012-11-07T14:33:04.877 回答