背景:
我正在使用xCode 5为iOS7编写琐事APP。截至目前,有两种类型的问题1)需要为答案输入文本字段的问题和2)多项选择题。在用户输入/选择答案后,他们点击"检查答案"显示UIView的按钮,该UIView具有评估标签(正确/不正确)和原因标签(这解释了他们的答案正确或不正确的原因)。在查看评估后,用户可以单击下一个问题按钮以显示下一个问题。我必须根据显示的问题类型重新定位检查答案按钮/ Reason Box UIView / Next Question Button,因为文本字段只占用一行,并且多个选项显示在tableview中,因此占用了更多空间。多选题和可能答案包含在一个UIView对象中,而文本问题和文本字段包含在单独的UIView中(我根据显示的问题将隐藏属性切换为true / false)。由于试图根据包含多项选项的UITableView的高度调整原始问题框的问题,我不得不这样做。这一切都很好但是......
我的问题: 如上所述,我可以根据需要通过执行以下操作来移动必要的标签/按钮......
我可以通过执行以下操作来移动检查答案按钮:
//Moves Check Answer back to original position for text field questions
-(void)moveCheckAnswerBack {
CGRect checkAnswerFrame = self.CheckAnswerButton.frame;
checkAnswerFrame.origin.y = 126;
self.CheckAnswerButton.frame = checkAnswerFrame;
}
//Moves Check answer button down for Multiple Choice Questions
-(void)moveCheckAnswerButton {
CGRect checkAnswerFrame = self.CheckAnswerButton.frame;
checkAnswerFrame.origin.y = 300;
self.CheckAnswerButton.frame = checkAnswerFrame;
}
通过执行以下操作,移动UIView(包含评估标签和原因标签)和下一个问题按钮:
//MOVES REASONS UIView(containing evaluation label and reason label) and Next Button Back to original position for Text Questions
-(void)moveRBoxBack {
CGRect rBoxFrame = self.rBox.frame;
rBoxFrame.origin.y = 174;
self.rBox.frame = rBoxFrame;
self.rBox.hidden= false;
CGRect NBFrame = self.NextQuestionButton.frame;
NBFrame.origin.y = 313;
self.NextQuestionButton.frame = NBFrame;
}
//MOVES REASONS UIView(containing evaluation label and reason label) and Next Button Down for Multiple Choice Questions
-(void)moveRBox {
CGRect rBoxFrame = self.rBox.frame;
rBoxFrame.origin.y = 320;
self.rBox.frame = rBoxFrame;
self.rBox.hidden= false;
CGRect NBFrame = self.NextQuestionButton.frame;
NBFrame.origin.y = 463;
self.NextQuestionButton.frame = NBFrame;
}
问题出现在哪里...如果我改变设备的方向,则所有上述内容都会重新定位到原来的位置,导致它与多项选择问题重叠。 (注意:对于文本字段问题,这不是问题,因为原始位置设置为与文本字段问题一起使用。)
我试图通过调用willRotateToInterfaceOrientation中的相应方法来解决这个问题,如下所示:
-(void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration{
if (UIInterfaceOrientationIsPortrait(toInterfaceOrientation)) {
[self reOrderToPortrait];
} else if (UIInterfaceOrientationIsLandscape(toInterfaceOrientation)){
[self reOrderToLandScape];
}
}
-(void) reOrderToPortrait {
NSString *qType = [_tempDictionary objectForKey:@"question_type"];
//CHANGE LABEL WIDTH TO CONTRACT TO FIT ON PORTRAIT
self.LabelWidth.constant = 240;
self.mcQLabelWidth.constant = 240;
// CHECK QUESTION TYPE 1 = TEXT 2 = MULTIPLE CHOICE
if ([qType intValue] == 1) {
[self moveCheckAnswerBack];
[self moveRBoxBack];
} else if ([qType intValue] == 2) {
[self moveCheckAnswerButton];
[self moveRBox];
}
}
-(void)reOrderToLandScape {
NSString *qType = [_tempDictionary objectForKey:@"question_type"];
// CHECK FOR RETINA DISPLAY
if ([[UIScreen mainScreen] scale] == 2.0) {
//CHECK QUESTION TYPE 1 = TEXT FIELD 2 = MULTIPLE CHOICE
if ([qType intValue] == 1) {
[self moveCheckAnswerBack];
[self moveRBoxBack];
} else if ([qType intValue] == 2) {
[self moveCheckAnswerButton];
[self moveRBox];
}
if([UIScreen mainScreen].bounds.size.height == 568){
// iPhone retina-4.0 inch and change Label width
self.mcQLabelWidth.constant = 488;
self.LabelWidth.constant = 488;
} else{
// iPhone retina-3.5 inch and change label width
self.mcQLabelWidth.constant = 380;
self.LabelWidth.constant = 380;
}
}
}
无论我是从风景出发,定位都搞砸了 - >肖像或来自肖像 - >风景......如果我删除了willRotateToInerfaceOrientation方法,也可能值得注意的是元素仍保留在正确的位置...但是内容会停止缩放到适当的宽度并保持默认的纵向宽度......
我是使用自动布局的新手,所以我不确定这是否是一个约束问题。另外值得注意的是,所有这些都包含在UIScrollview中。
任何帮助将不胜感激...感谢您的提前时间。