【问题标题】:UIView setCenter problemUIView setCenter 问题
【发布时间】:2011-07-18 09:55:20
【问题描述】:

我在做一些非常简单的事情时遇到了很多麻烦。我有一个 viewController 和一个 subViewController,它们都带有从 nib 加载的视图。为澄清起见,在笔尖中,父视图的大小为 1024 x 748,子视图的大小为 640 x 480。

在 viewController 的 viewDidLoad 上,我像这样添加 subViewController 的视图:

[self.view addSubview:self.subViewController.view];
NSLog(@"subview.frame:%@",NSStringFromCGRect(self.subViewController.view.frame));

日志输出:

subview.frame:{{0, 0}, {640, 480}}

然后,只是为了测试一下,我使用 setCenter 尝试将子视图重新定位在父视图中的相同位置,如下所示:

CGPoint newCenter = CGPointMake(0,0);  //should stay at the same position..
[self.subViewController.view setCenter:newCenter];
NSLog(@"after changing center.subview.frame:%@",NSStringFromCGRect(self.subViewController.view.frame));

日志输出:

after changing center. subview.frame:{{-320, -240}, {640, 480}}

现在我有一种感觉,可能是笔尖出了问题,我猜这与弹簧和支柱/尺寸和位置选项有关。我只能猜测是这个,因为这是我对 IB 最不了解的功能。

关于可能导致此问题的任何其他想法?关于如何在 IB 中设置视图控制器的视图,以便它们自动与其他视图控制器的视图对齐,你们有什么一般的提示吗?设置好之后,setCenter 是动态移动它们的正确方法吗?

【问题讨论】:

    标签: objective-c view interface-builder viewcontroller


    【解决方案1】:

    鉴于您正在执行的操作,输出是正确的。点(0,0) 是左上角。如果将子视图的中心设置为此,那么子视图的左上角确实会是(-640/2, -480/2)

    要使左上角对齐,请使用

    [self.subViewController.view setCenter:CGPointMake(320.0,240.0)];
    

    【讨论】:

    • 好的,我明白了。我认为我的误解是我认为框架的原点与中心相同,而不是左上角。愚蠢的错误。有没有办法在 IB 中设置视图的初始中心?
    • 抱歉给大家带来了麻烦。老实说,我从未注意到评分箭头下方的复选按钮 x_O
    • 不用担心。在 IB 中,属性窗口中的第三个选项卡(带有标尺)将指示任何子视图的位置和大小。这使您无需以编程方式即可精确对齐中心、边或角。
    【解决方案2】:

    问题不清楚。如果您将中心设置为 0,0,那么您应该期望帧原点为 -320,-240 看起来是这样。也许你误解了CGRect? CGRect 由原点和大小组成。 Frame 是一个 CGRect。框架、大小和中心都是相关的,改变框架改变大小和中心,改变中心改变框架。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-15
      • 2011-08-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多