gpt4 book ai didi

ios - 自动调整 View 大小会增加横向模式下 View 之间的距离

转载 作者:行者123 更新时间:2023-11-29 12:54:55 25 4
gpt4 key购买 nike

我有一个 iPhone 应用程序,它应该支持 landscapeportrait 方向。我已经设置了 Use Autolayout 作为 NO

portrait orientation 中,我的 view 显示为 enter image description here

landscape orientation 中,我的 view 显示为 enter image description here

我已经为两个 View 设置了autosizing,如下图所示

enter image description here

为什么在横向模式下 View 之间的距离越来越大?谁能帮帮我?

最佳答案

如果我错了,有人可以纠正我,但对我来说这似乎是正确的行为。 View 不会调整大小,也不会固定在父 View 的任何一侧。 superview 变得越来越宽,因此它们之间的区域变得越来越大。如果您想将它们设置在某个位置并且不想使用自动布局,那么最好的方法就是在发生旋转时将框架设置在您想要的位置。您可以分两步执行此操作:首先设置你的框架——我喜欢定义一个很好的结构如下

//Use this define to set frames for views
#define TAG_RECT( tag, x, y, width, height ) \
[NSValue valueWithCGRect:CGRectMake(x, y, width, height)], \
[NSNumber numberWithInteger:tag]

然后在 viewDidLoad 中设置框架: 了解将 View 放置在何处的一个好方法是将 View Controller 复制到 Storyboard 中并将其粘贴到旁边。然后您可以将其更改为横向并将 View 准确放置在您想要的位置,只需查看位置和尺寸即可。不要忘记为您的 View 设置标签。

// Collect the frame positions for elements in portrait mode
NSMutableDictionary *portraitPositions = [[NSMutableDictionary alloc] init];
// You only have two views, but if you have more its nice to do it in a loop
for (NSInteger i = 1; i <= 2; i++) {
UIView *view = [self.view viewWithTag:i];

[portraitPositions setObject:[NSValue valueWithCGRect:view.frame] forKey:[NSNumber numberWithInteger:i]];
}
self.portraitFrames = [portraitPositions copy];

// Let's build the landscape frame positions dictionary
if ((UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)) {
//Set up frames for variables in iPad version
self.landscapeFrames = [NSDictionary dictionaryWithObjectsAndKeys:
TAG_RECT(1, 325, 100, 375, 90), // view one
TAG_RECT(2, 525, 100, 375, 90), // view two
nil];
}

接下来,每当您的 View 旋转时,您需要布局相应的框架集

- (void) willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration {
if (UIInterfaceOrientationIsLandscape(self.interfaceOrientation)) {
// Lay out for landscape mode
[self layoutForFrameSet:self.landscapeFrames];
}
else if (UIInterfaceOrientationIsPortrait(self.interfaceOrientation)) {
// Lay out for portrait mode
[self layoutForFrameSet:self.portraitFrames];
}
}


- (void)layoutForFrameSet:(NSDictionary *)frames {
for (NSNumber *key in frames.allKeys) {
[self.view viewWithTag:[key integerValue]].frame = [[frames objectForKey:key] CGRectValue];
}
}

抱歉,如果这更复杂,但这是在没有自动布局的情况下将 View 准确放置在您想要的位置的最佳方式

关于ios - 自动调整 View 大小会增加横向模式下 View 之间的距离,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21396257/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com