我的设备上的UISwitch:切换底部像素与http://gorgando.com/uiswitch.jpg的图像
模拟器上的UISwitch:Good UISwitch UISwitch
正如你所看到的,底部的像素在设备上被切断,而在模拟器上没有。我已经试过了我所能想到的一切,但是没有什么能解决问题。
我尝试过的一些事情:
以下是相关代码:
这是在viewDidLoad of uiTableViewController中:
UISwitch *sw = [[UISwitch alloc] init];
self.contactedSwitch = sw;
[sw release];
self.contactedSwitch = [UISwitch switchWithLeftText:@"YES" andRight:@"NO"];
self.contactedSwitch.center = CGPointMake(230, 22);
self.contactedSwitch.on = [self.contact.contacted boolValue];
这就是switchWithLeftText:andRight方法的来源:
#import "UISwitch-Extended.h"
#define TAG_OFFSET 900
@implementation UISwitch (tagged)
- (void) spelunkAndTag: (UIView *) aView withCount:(int *) count
{
for (UIView *subview in [aView subviews])
{
if ([subview isKindOfClass:[UILabel class]])
{
*count += 1;
[subview setTag:(TAG_OFFSET + *count)];
}
else
[self spelunkAndTag:subview withCount:count];
}
}
- (UILabel *) label1
{
return (UILabel *) [self viewWithTag:TAG_OFFSET + 1];
}
- (UILabel *) label2
{
return (UILabel *) [self viewWithTag:TAG_OFFSET + 2];
}
+ (UISwitch *) switchWithLeftText: (NSString *) tag1 andRight: (NSString *) tag2
{
UISwitch *switchView = [[UISwitch alloc] initWithFrame:CGRectMake(0, 0, 94, 27)];
int labelCount = 0;
[switchView spelunkAndTag:switchView withCount:&labelCount];
if (labelCount == 2)
{
[switchView.label1 setText:tag1];
[switchView.label2 setText:tag2];
}
return [switchView autorelease];
}
@end
这就是我将UISwitch添加到我的表视图单元格中的地方:
[[contactedCell contentView] addSubview:self.contactedSwitch];
非常感谢!
Update --我认为表格视图单元可能是问题所在,所以我将这些UISwitches添加到常规的UIView中,以查看它们的外观。我有一个完全相同的问题,他们看起来很好,在模拟器和底部被切在设备中。太奇怪了!
发布于 2010-06-28 07:43:51
从来不知道到底出了什么问题,但我最终在IB中创建了UISwitches,并让它以这种方式工作得很好。非常奇怪的是,它在IB中工作,而不是以编程的方式工作,而我基本上是在做同样的事情。
发布于 2010-07-06 14:20:40
当我编程创建一个UISwitch并改变其帧的原点时,我也遇到了同样的问题--它原来是一个半像素的问题。
注意到半像素错误的一个关键是:在模拟器和设备上,不需要的工件是否以不同的方式出现?
将UISwitch与Interface放在一起的解决方案解决了这个问题--如果您正在设置UISwitch的帧的原点x/y,还可以确保设置()您的新坐标。
UISwitch *mySwitch = [[UISwitch alloc] initWithFrame(CGRectZero)];
CGRect switchFrame = mySwitch.frame;
// move frame up without pixel fractions
switchFrame.origin.y = floor((cell.contentView.frame.size.height - switchFrame.size.height) / 2);
mySwitch.frame = switchFrame;
[cell.contentView addSubview:mySwitch];
在最初的海报案例中,uiswitch的高度是一个奇数(27个像素),因此将中心设置为22,将高度除以13.5。UISwitch的原点y坐标为22-13.5 = 8.5像素.不要通过设置UISwitch的中心移动它,或者设置坐标,或者在调用CGPointMake(230,22.5)中使用分数。
另一种跟踪这类错误的方法是通过Interface查找".5“坐标。我发现,有时过度调整UI元素在Interface中的位置会引入这个bug。
发布于 2011-06-01 23:05:07
这是由乌斯威奇的顶部造成的。您可以使用UISwich.origin.y = ceil((height - UISwich.size.height)/2)
来修复它。
https://stackoverflow.com/questions/3113260
复制