IOS UIScrollView中的位置坐标值加倍

IOS UIScrollView中的位置坐标值加倍,ios,objective-c,uiscrollview,coordinates,Ios,Objective C,Uiscrollview,Coordinates,我有一个ViewController,它包含一个UINavigationBar和一个UIScrollView。 在滚动视图中,我放置了其他视图来创建分页类型的东西。 我完美地完成了这项工作,但我必须解决一个非常奇怪的问题,即UIScrollView中的所有坐标值都加倍了,但元素在.frame.origin中返回了正确的坐标 不知道为什么会这样,在搜索并没有发现任何东西的情况下,我认为我一定是错了,于是进行了一次测试 我创建了上面的场景,但在背景中我放置了一个10x10像素网格的测量图像。 我在v

我有一个ViewController,它包含一个UINavigationBar和一个UIScrollView。 在滚动视图中,我放置了其他视图来创建分页类型的东西。 我完美地完成了这项工作,但我必须解决一个非常奇怪的问题,即UIScrollView中的所有坐标值都加倍了,但元素在.frame.origin中返回了正确的坐标

不知道为什么会这样,在搜索并没有发现任何东西的情况下,我认为我一定是错了,于是进行了一次测试

我创建了上面的场景,但在背景中我放置了一个10x10像素网格的测量图像。 我在viewController的viewDidLoad中运行它:

[super viewDidLoad];
// Size to fit the screen
float height = [[UIScreen mainScreen] bounds].size.height;
height -= [UIApplication sharedApplication].statusBarFrame.size.height;
height -= self.navBar.frame.origin.y;
height -= self.navBar.frame.size.height;
CGRect frame = self.scrollView.frame;
frame.size.height = height;
self.scrollView.frame = frame;

frame.origin.y = 10;
testUIView *testView = [[testUIView alloc] initWithFrame:frame];
[self.scrollView addSubview:testView];
结果证实了我最担心的事情。 网格显示在testView下,显示两个10像素的块。 价值确实翻了一番——但为什么会这样?我应该怎么做

[编辑]

出于好奇,以下是插入视图的代码:

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        // Initialization code
        [[NSBundle mainBundle] loadNibNamed:@"testUIView" owner:self options:nil];

        self.view.frame = frame;

        [self addSubview:self.view];
        [self.spinner startAnimating];
    }
    return self;
}

从你的代码中不清楚你是如何确定某些东西是“加倍”的,但原因几乎可以肯定是你混淆了点和像素,并且你在视网膜设备上运行

几乎所有坐标(尤其是
CGPoint
中的东西)都以点为单位给出。在视网膜显示器上,每个点有4个像素(两行两列)。这称为
刻度,对于视网膜显示为“2”。有关更多详细信息,请参阅。

这里的课程是“尽量观察”,以及“不要遗漏细节”

x和y值加倍,因为在initWithFrame中,框架直接应用于子视图,该子视图是来自xib的IBOutlet。添加未修改的帧意味着x和y值保留在视图的坐标空间内。因此,视图在父视图中显示为y=10,子视图在视图中显示为y=10,从而导致布局将子视图放置为y=20

解决方案:在将帧原点应用于子视图之前重置帧原点


现在是戴帽子的时候了

谢谢你的回答。事实上,这已经在iPone emulator和两个retina(iPhone)模拟器中运行,并且始终具有相同的结果。我再次运行测试只是为了确定。确认在旧的和新的(视网膜)模拟器中的结果是相同的。此外,此效果仅出现在UIScrollView中。我明白你的观点,像素和点不是一回事。我通过目视测量结果布局来确定倍增效果。我会发布一张图片,但似乎我对这样的滑稽动作太不在行了。无论如何,这就是我的观点。输入值应导致可预测的布局行为。在这种情况下,他们没有。放置在y=10处的视图显示在y=20处。这在视觉上与状态栏的高度相同,也是20。这使得在这个UIScrollView中放置视图变得非常困难,尽管可以通过将所有坐标除以2来完成。