Iphone 子视图显示在具有相同框架和superview的两个视图的不同位置

Iphone 子视图显示在具有相同框架和superview的两个视图的不同位置,iphone,objective-c,ios,uiscrollview,uilabel,Iphone,Objective C,Ios,Uiscrollview,Uilabel,我试图将子视图添加到某个视图(坏视图),但它总是显示在我希望它位于的右侧(屏幕上的x值不同) 但是,我注意到,当我将此子视图添加到其他视图(良好视图)时,它被放置在正确的位置 坏视图和好视图是同一视图的子视图,具有相同的帧(好视图是滚动视图中的可缩放视图,而坏视图是不缩放的覆盖视图) 我运行以下代码: view.frame = [[self tiledScrollView] tileContainerView].frame; if ([[[self tiledScrollView] tileC

我试图将子视图添加到某个视图(坏视图),但它总是显示在我希望它位于的右侧(屏幕上的x值不同)

但是,我注意到,当我将此子视图添加到其他视图(良好视图)时,它被放置在正确的位置

坏视图和好视图是同一视图的子视图,具有相同的帧(好视图是滚动视图中的可缩放视图,而坏视图是不缩放的覆盖视图)

我运行以下代码:

view.frame = [[self tiledScrollView] tileContainerView].frame;

if ([[[self tiledScrollView] tileContainerView] superview] == [view superview])
{
    NSLog(@"SAME SUPERVIEWS");
}

[[self tiledScrollView] tileContainerView].frame = view.frame;

NSLog(@"FRAME FOR VIEW THAT DISPLAYS INCORRECTLY: %f, %f, %f, %f, \n FRAME FOR VIEW THAT DISPLAYS CORRECTLY: %f, %f, %f, %f", view.frame.origin.x, view.frame.origin.y, view.frame.size.width, view.frame.size.height, [[self tiledScrollView] tileContainerView].frame.origin.x, [[self tiledScrollView] tileContainerView].frame.origin.y, [[self tiledScrollView] tileContainerView].frame.size.width, [[self tiledScrollView] tileContainerView].frame.size.height);
然后立即将子视图添加到[[self tiledScrollView]tileContainerView](良好视图)或视图(不良视图)

在良好的视图中,标签显示在我希望的位置。在“坏视图”中,标签稍微向右显示

上述代码的输出为:

相同的超视图

显示不正确的视图框架:0.000275,0.000000983.999451,648.282349, 正确显示的视图框架:0.000293,-0.000003983.999390648.282349

因此,它们实际上没有完全相同的帧(即使我之前将它们设置为相等),但它们非常接近,唯一可能出现舍入差异的地方是origin.y值,但应用程序运行时的差异是origin.x值

我已经浪费了太多的时间试图解决这个问题,所以我非常感谢您的帮助

[[self tiledScrollView] tileContainerView].frame = view.frame;
这个

或者相反,正如我从输出中看到的,输出显示view.frame是不正确的:

view.frame.origin.x    = [[self tiledScrollView] tileContainerView].frame.origin.x;
view.frame.origin.y    = [[self tiledScrollView] tileContainerView].frame.origin.y;
view.frame.size.width  = [[self tiledScrollView] tileContainerView].frame.size.width;
view.frame.size.height = [[self tiledScrollView] tileContainerView].frame.size.height;

视图的
框架
是其superview坐标系中的边框。可能发生的一件事是,坏视图和好视图在各自的坐标系中不同。这将很容易解释为什么子视图会出现在屏幕上的不同位置。检查的一个简单方法是记录每个视图的
边界
,而不是
<代码>边界提供视图在其自身坐标系中的边界矩形——如果它们不相同,您就找到了问题的原因。

啊哈!界限确实不同。谢谢,这很有帮助。
view.frame.origin.x    = [[self tiledScrollView] tileContainerView].frame.origin.x;
view.frame.origin.y    = [[self tiledScrollView] tileContainerView].frame.origin.y;
view.frame.size.width  = [[self tiledScrollView] tileContainerView].frame.size.width;
view.frame.size.height = [[self tiledScrollView] tileContainerView].frame.size.height;