我创建了一个自定义视图,它是从xib文件中加载的,如下所示:
- (id)initWithFrame:(CGRect)frame {
self = [super initWithFrame:frame];
if (self) {
// Initialization code.
[[NSBundle mainBundle] loadNibNamed:@"TachoView" owner:self options:nil];
[self addSubview:self.view];
[self initUi];
}
return self;
}
当设备方向发生变化时,我现在遇到了一些子视图的自动调整和定位问题。这些屏幕截图描述了这种行为。
在viewDidLoad之后,一切看起来都很好:
旋转到横向模式后,布局仍然正常:
但是当转回到protrait时,它看起来像这样:
如果我在单个视图虚拟项目中测试它们,相同的文件.h,.m和.xib工作正常。所以我认为,在xib中定位和调整大小的设置是可以的。与我的应用程序的不同之处在于,视图位于具有多个其他视图的滚动视图上。在方向更改时,我会更改所有这些视图的大小,以便按预期布置所有内容。相关代码是最里面的for循环:
-(void) viewWillLayoutSubviews {
float h = self.view.frame.size.height;
float w = self.view.frame.size.width;
// set the size of the vertical scrollview
verticalView.frame = CGRectMake(0, 0, w, h * gridHeight);
verticalScrollView.frame = CGRectMake(0, 0, w, h);
[verticalScrollView setContentSize:CGSizeMake(w, h * gridHeight)];
[verticalScrollView layoutIfNeeded];
// set the size of the horizontal scrollviews
for (int i=0; i<verticalView.subviews.count; i++) {
UIScrollView *scrollView = (UIScrollView *) [verticalView.subviews objectAtIndex:i];
UIView *container = (UIView *) [[scrollView subviews] objectAtIndex:0];
int subviewCount = container.subviews.count;
scrollView.frame = CGRectMake(0, h*i, w, h);
[scrollView setContentSize:CGSizeMake(w * subviewCount, h)];
container.frame = CGRectMake(0, 0, w * subviewCount, h);
// set the size of the actual views
for (int j=0; j<container.subviews.count; j++) {
UIView *view = [container.subviews objectAtIndex:j];
// FIXME manchmal crashed hier die WebView. Muss das hier im
// ui thread ausgeführt werden? wird diese methode nicht vom
// ui thread aufgerufen?
view.frame = CGRectMake(w*j, 0, w, h);
}
}
}
任何想法,第二个方向变化出了什么问题?我可以手动布局整个视图,但我认为也可以使用自动调整功能。
答案 0 :(得分:0)
确保UIViewAutoresizingMasks设置如下
1)Liegezeiten标签是flexibleWidth
2)%标签中的Wert需要只有flexibleTopMargin,flexibleWidth和flexibleRightMargin
3)下面的数字标签(64,40,20):