键盘是否有可能改变 iOS 应用方向?
Is it possible that keyboard change iOS app orientation?
我有问题。
在我的应用程序中,我有一个包含一些文本字段的视图。
我使用 willRotateToInterfaceOrientation
方法来改变方向。此外,我更新了纵向和横向模式的文本字段框架。
当我在应用程序中设置横向模式时,一切正常,直到我点击某个文本字段并出现键盘。在那之后,文本框 return 到纵向模式(但只有文本框和标签的框架)。
当我在父视图中旋转到横向并使用文本字段转到我的视图时,也会发生这种情况。
键盘是否可以更改 iOS 应用方向?我很乐意提供一些建议。
代码(我在父视图和第二视图中进行):
在 viewDidLoad 中:
[self setFramesForInterface:self.interfaceOrientation];
方法:
- (void)setFramesForInterface:(UIInterfaceOrientation)toInterfaceOrientation {
switch (toInterfaceOrientation) {
case UIInterfaceOrientationUnknown:
[self setFramesForPortrait];
break;
case UIInterfaceOrientationPortrait:
[self setFramesForPortrait];
break;
case UIInterfaceOrientationPortraitUpsideDown:
[self setFramesForPortrait];
break;
case UIInterfaceOrientationLandscapeLeft:
[self setFramesForLandscapeLeft];
break;
case UIInterfaceOrientationLandscapeRight:
[self setFramesForLandscapeLeft];
break;
default:
break;
} }
- (void)setFramesForPortrait {
dispatch_async(dispatch_get_main_queue(), ^{
[_stationNameLabel setFrame:CGRectMake(8, 40, 105, 30)];
[_addresLabel setFrame:CGRectMake(8, 85, 105, 30)];
.........................
}); }
- (void)setFramesForLandscapeLeft {
dispatch_async(dispatch_get_main_queue(), ^{
[_stationNameLabel setFrame:CGRectMake(8, 20, 105, 30)];
[_addresLabel setFrame:CGRectMake(8, 65, 105, 30)];
...................
}); }
- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration {
[super willRotateToInterfaceOrientation:toInterfaceOrientation duration:duration];
[self setFramesForInterface:toInterfaceOrientation];}
我猜你正在使用自动布局。这就是问题的根源。
使用自动布局时,您无法使用 setFrame:
重新定位/调整大小。您必须改为更改 约束条件 。
好吧,您 可以 使用 setFrame:
,但这有点毫无意义,因为约束才是最重要的。当出现布局时,无论出于何种原因,都会遵守约束。所以发生在你身上的是:你改变了框架,但随后你导致布局被触发并且约束接管,将所有东西移回原来的位置。
我有问题。
在我的应用程序中,我有一个包含一些文本字段的视图。
我使用 willRotateToInterfaceOrientation
方法来改变方向。此外,我更新了纵向和横向模式的文本字段框架。
当我在应用程序中设置横向模式时,一切正常,直到我点击某个文本字段并出现键盘。在那之后,文本框 return 到纵向模式(但只有文本框和标签的框架)。
当我在父视图中旋转到横向并使用文本字段转到我的视图时,也会发生这种情况。
键盘是否可以更改 iOS 应用方向?我很乐意提供一些建议。
代码(我在父视图和第二视图中进行):
在 viewDidLoad 中:
[self setFramesForInterface:self.interfaceOrientation];
方法:
- (void)setFramesForInterface:(UIInterfaceOrientation)toInterfaceOrientation {
switch (toInterfaceOrientation) {
case UIInterfaceOrientationUnknown:
[self setFramesForPortrait];
break;
case UIInterfaceOrientationPortrait:
[self setFramesForPortrait];
break;
case UIInterfaceOrientationPortraitUpsideDown:
[self setFramesForPortrait];
break;
case UIInterfaceOrientationLandscapeLeft:
[self setFramesForLandscapeLeft];
break;
case UIInterfaceOrientationLandscapeRight:
[self setFramesForLandscapeLeft];
break;
default:
break;
} }
- (void)setFramesForPortrait {
dispatch_async(dispatch_get_main_queue(), ^{
[_stationNameLabel setFrame:CGRectMake(8, 40, 105, 30)];
[_addresLabel setFrame:CGRectMake(8, 85, 105, 30)];
.........................
}); }
- (void)setFramesForLandscapeLeft {
dispatch_async(dispatch_get_main_queue(), ^{
[_stationNameLabel setFrame:CGRectMake(8, 20, 105, 30)];
[_addresLabel setFrame:CGRectMake(8, 65, 105, 30)];
...................
}); }
- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration {
[super willRotateToInterfaceOrientation:toInterfaceOrientation duration:duration];
[self setFramesForInterface:toInterfaceOrientation];}
我猜你正在使用自动布局。这就是问题的根源。
使用自动布局时,您无法使用 setFrame:
重新定位/调整大小。您必须改为更改 约束条件 。
好吧,您 可以 使用 setFrame:
,但这有点毫无意义,因为约束才是最重要的。当出现布局时,无论出于何种原因,都会遵守约束。所以发生在你身上的是:你改变了框架,但随后你导致布局被触发并且约束接管,将所有东西移回原来的位置。