可可:为什么将一个帧分配给一个帧不起作用但是分配边界确实如此

时间:2012-10-02 16:16:18

标签: cocoa-touch

我一直在阅读与框架和边界之间的差异相关的不同问题(Cocoa: What's the difference between the frame and the bounds?UIView frame, bounds and center),但我仍然不明白为什么会这样:

UILabel *newMark = [[UILabel alloc] initWithFrame:self.frame];
newMark.text = @"|A3";
[self addSubview:newMark];

或者这个:

UILabel *newMark = [[UILabel alloc] init];
newMark.text = @"|A3";
newMark.frame = self.frame;
[self addSubview:newMark];

标签不会显示,但在使用与边界等效的标签时,如下所示:

UILabel *newMark = [[UILabel alloc] initWithFrame:self.bounds];
newMark.text = @"|A3";
[self addSubview:newMark];

或者

UILabel *newMark = [[UILabel alloc] init];
newMark.text = @"|A3";
newMark.frame = self.bounds;
[self addSubview:newMark];

显示。我没有使用边界的问题,但我认为不是将标签放在正确的位置,因为它可以在下面的屏幕截图中看到:

Label

在哪里,如您所见,“|”,“A”和“3”被剪切,因为它们在底部显示的位置比ipad的屏幕更多。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

frame与其超级视图相关。因此,如果您的框架的原点位于您的超级视图中(100,200),并且您将子视图的框架设置为与您的框架相同,那么您的子视图将位于(100,200)内。

通常情况下(如果没有涉及变换),当你想告诉子视图与superview的大小相同时,你会说:

subview.frame = superview.bounds;