0

我正在尝试将子视图添加到某个视图(坏视图),它总是出现在我想要的位置的右​​侧(屏幕上的 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](好视图)或视图(坏视图)。

在 Good View 中,标签出现在我想要的位置。在 Bad View 中,标签显示在右侧一点。

上述代码的输出是:

相同的观点

显示不正确的视图框架:0.000275、0.000000、983.999451、648.282349、正确显示的视图框架:0.000293、-0.000003、983.999390、648.282349

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

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

4

2 回答 2

0

尝试代替

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

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

或反转,因为我从您的输出中看到,输出显示 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;
于 2012-06-22T00:56:33.537 回答
0

视图frame是其在其父视图坐标系中的边界矩形。可能发生的一件事是坏视图和好视图在它们自己的坐标系中不同。这很容易解释为什么您的子视图会出现在屏幕上的不同位置。一个简单的检查方法是记录bounds每个视图的frame. bounds在其自己的坐标系中为您提供视图的边界矩形 - 如果它们不一样,您已经找到了问题的原因。

于 2012-06-22T02:49:59.453 回答