Возможно, я не делаю это правильно. Не сделав приложение для iPad, прежде чем делать то, что кажется мне естественным.UIView не позиционируется с помощью setFrame
У меня есть UIView, который будет создан из других UIViews. В частности, я хочу динамически создавать и добавлять subviews в каждое из этих подзонов. Другими словами:
UIView
|
| --> UIView
|
| --> Dynamic UIView 1
| --> Dynamic UIView 2
| --> ...
мне удалось получить 'Dynamic UIView 1', добавив к его initWithFrame этот бит кода для загрузки XIB:
NSArray *nibViews = [[NSBundle mainBundle] loadNibNamed:@"ItemView"
owner:[[ItemViewController alloc] init]
options:nil];
ItemView *infoView = [nibViews objectAtIndex:0];
[self addSubview:infoView];
Это работает! Проблема, с которой я сталкиваюсь, заключается в том, что «Dynamic UIView n» всегда отображается в верхнем левом углу экрана. Если я попытаюсь изменить позицию с помощью setFrame, я получаю черный ящик при представлении кадра, однако фактический контент управления остается в верхнем левом углу.
Любые идеи? Есть лучший способ сделать это?
----- ----- Обновление
Вот скриншот зрения корня. Overview of main UIView http://www.freeimagehosting.net/uploads/460090996d.png
Весь контроль - это вызов CurrentItemsViewController. Зеленая область - это UIView, внутри которой я связан обратно в коде через ссылку в IB, в образце кода это называется «itemsUIView». Вот как я добавляю элементы в CurrentItemsViewController.m
- (id)init {
[super initWithNibName:nil
bundle:nil];
UITabBarItem *tbi = [self tabBarItem];
[tbi setTitle:@"Current"];
/* Approach 1 */
NSArray *nibViews = [[NSBundle mainBundle] loadNibNamed:@"ItemView"
owner:[[ItemViewController alloc] init]
options:nil];
ItemView *subItemView1 = [nibViews objectAtIndex:0];
/* Approach 2 - this apprach does Approach 1 in the initWithFrame method */
//ItemView *subItemView1 = [[ItemView alloc] initWithFrame:CGRectMake(120, 120, 354, 229)];
/* Approach 3 */
//ItemViewController *ctr = [[ItemViewController alloc] init];
//UIView *subItemView1 = [ctr view];
[[self view] addSubview:subItemView1];
// [[self itemsUIView] addSubview:subItemView1]; <-- doesn't render subItemView1 at all
[subItemView1 release];
[subItemView1 setFrame:CGRectMake(120, 120, 354, 229)];
[subItemView1 setBounds:CGRectMake(120, 120, 354, 229)];
return self;
}
Внутри ItemView.m я это, он получает вызов только подход 2 и 3.
- (id)initWithFrame:(CGRect)frame {
if ((self = [super initWithFrame:frame])) {
NSArray *nibViews = [[NSBundle mainBundle] loadNibNamed:@"ItemView"
owner:[[ItemViewController alloc] init]
options:nil];
ItemView *infoView = [nibViews objectAtIndex:0];
[self addSubview:infoView];
}
return self;
}
Как показано на рисунке, я попытался создать ItemView 3 по-разному, и каждый из них дает тот же результат. Когда я добавляю представление в качестве подзона корневого представления, я получаю это. Обратите внимание, что квадрат появляется там, где он должен отображаться, однако ViewItem фактически отображается в верхнем левом углу. В примере выше, когда я добавляю subItemView1, он вообще ничего не отображает.
alt text http://www.freeimagehosting.net/uploads/c6635ce860.png
Просьба представить некоторые подробности: скриншоты, весь код 'initWithFrame:', то 'setFrame' код ... –
Пусть я знаю, если вы хотите больше. – Steven