【问题标题】:Placing a subview on another view将子视图放在另一个视图上
【发布时间】:2011-02-10 09:24:01
【问题描述】:


我已成功将 xib 文件中的视图作为子视图动态加载到窗口(另一个 xib)。
我知道默认情况下,此子视图加载在窗口的第一象限,即子视图位于窗口的最左下角。我的窗户也是如此。
现在的问题是我如何将子视图放置在窗口的其他位置。换句话说,如果我想将子视图放在窗口的顶部,我将如何实现它??

如果我能得到 NSRect 和 NSwindow 对象框架的解释,我将不胜感激。
如果任何 API 中有任何方法,请指导我。在此先感谢...

更新:

@interface ViewAvailableItemsWindowController : NSObject {
    IBOutlet NSWindow * viewAvailableItemsWindow; //Window in question
    IBOutlet NSView * viewAvailableItemsView; //View in question

    ItemSearchViewController * instanceItemSearchView; //ViewController object 
}

@end


@implementation ViewAvailableItemsWindowController

-(void)awakeFromNib{
    [viewAvailableItemsWindow makeKeyAndOrderFront:nil];
    instanceItemSearchView = [[ItemSearchViewController alloc]initWithNibName:@"ItemSearchView" bundle:nil] ; //Initiating the viewController with the nib for the view.
    [viewAvailableItemsView addSubview:[instanceItemSearchView view]];  //Adding the subview to the window..

}

-(void)dealloc{
    [instanceItemSearchView release];
    [super dealloc];
}

@end

这会将视图加载到窗口的第一象限 - 我的意思是窗口的左下角。我希望将视图放置在窗口的顶部中心。

【问题讨论】:

  • 你试过什么?您阅读了哪些文档?详细说明,我们将有一个很好的起点,而不仅仅是将您指向文档。
  • 我使用了一个 viewController 类来帮助我将视图加载到一个窗口上。我已经更新了我的问题中的代码...请看一下..

标签: objective-c cocoa


【解决方案1】:

NSRect 是一个矩形。它由原点和大小组成。原点是一个点,x 和 y。尺寸是宽度和高度。从现在开始,我将 rects 输入为 {{x, y}, {width, height}}

每个视图都有一个框架。视图的框架是该视图在其父视图中的位置。每个视图也有一个边界。视图的边界定义了视图的内部坐标系。默认为 0,0 位于左下角,随着 X 和 Y 的增加,您向右和向上移动。

示例:如果一个视图的边界为 {{0, 0}, {100, 100}},而您将另一个视图放入该视图并将其框架设置为 {{25, 50}, {10, 10}} 则子视图的大小为 10x10,位置在左边缘右侧 25 点,从底部向上 50 点。

边界大小几乎总是与帧大小相同。除非您打算缩放或移动所有子视图和自定义绘图,否则您通常不会设置或调整视图的边界 - 这是一项高级操作。

如果你有这样的事情:

+-------------------+
|     +----------+  |
|     |   +---+  |  |
|  A  | B | C |  |  |
|     |   +---+  |  |
|     +----------+  |
|                   |
|                   |
+-------------------+

其中每个框代表一个 NSView,每个视图都是下一个的子视图。所以 A 包含 B,包含 C。每个视图的边界和框架可能是这样的:

      Bounds                Frame
      {{X, Y},  {W,  H}}    {{ X,  Y},  {W,  H}}
A     {{0, 0}, {30, 30}}    {{ 0,  0}, {30, 30}}
B     {{0, 0}, {20, 15}}    {{20, 20}, {20, 15}}
C     {{0, 0}, {10, 10}}    {{10, 10}, {10, 10}}

【讨论】:

  • 你不觉得,c 的 x, y 应该是 {20, 20} 和 b (10, 10}??
  • 每个帧的原点都相对于封闭的超级视图。所以B相对于A,C相对于B。原点在左下角。所以 B 离 A 的左下角比 C 离 B 的左下角更远。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-18
相关资源
最近更新 更多