gpt4 book ai didi

objective-c - 在横向模式下向 UIScrollView 添加 subview

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:46:07 24 4
gpt4 key购买 nike

我有一个以横向模式启动的 View Controller ,其中有一个 UIScrollView。我尝试创建 subview 并将它们添加到 UIScrollView,但 View 的框架大小都是纵向大小。

这是我的代码:

- (void)viewDidLoad
{
[super viewDidLoad];

[self.scrollView setAutoresizingMask:(UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight)];

NSArray *colors = [NSArray arrayWithObjects:[UIColor redColor], [UIColor greenColor], [UIColor blueColor], nil];

for (int i = 0; i < colors.count; i++)
{
CGRect frame = self.scrollView.frame;
frame.origin.x = frame.size.width * i;
frame.origin.y = 0;

UIView *subview = [[UIView alloc] initWithFrame:frame];
subview.backgroundColor = [colors objectAtIndex:i];
[self.scrollView addSubview:subview];
}

self.scrollView.contentSize = CGSizeMake(self.scrollView.frame.size.width * colors.count,
self.scrollView.frame.size.height);
self.scrollView.pagingEnabled = YES;
self.scrollView.showsHorizontalScrollIndicator = NO;
self.scrollView.showsVerticalScrollIndicator = NO;
self.scrollView.scrollsToTop = NO;
}

输出:

enter image description here

最佳答案

- (void)viewDidLoad
{
[super viewDidLoad];
[self.scrollView setAutoresizingMask:(UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight)];
NSArray *colors = [NSArray arrayWithObjects:[UIColor redColor], [UIColor greenColor], [UIColor blueColor], nil];
for (int i = 0; i < colors.count; i++)
{
CGRect frame = self.scrollView.bounds;
frame.origin.x = frame.size.width * i;
frame.origin.y = 0;
UIView *subview = [[UIView alloc] initWithFrame:frame];
subview.backgroundColor = [colors objectAtIndex:i];
[self.scrollView addSubview:subview];
}
[self.scrollView setAutoresizesSubviews:NO];
self.scrollView.contentSize = CGSizeMake(self.scrollView.frame.size.width * colors.count,self.scrollView.frame.size.height);
self.scrollView.pagingEnabled = YES;
self.scrollView.showsHorizontalScrollIndicator = NO;
self.scrollView.showsVerticalScrollIndicator = NO;
self.scrollView.scrollsToTop = NO;
}

- (void) willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
{
currentPageOffset = [self.scrollView contentOffset].x / [self.scrollView bounds].size.width;
if(UIInterfaceOrientationIsPortrait(toInterfaceOrientation))
{
for(int i=0;i<=2;i++)
{
UIView *currentView = [[self.scrollView subviews] objectAtIndex:i];
[currentView setFrame:CGRectMake((i)*currentView.frame.size.height, 0, [self.scrollView bounds].size.height,[self.scrollView bounds].size.width)];
}

[self.scrollView setContentSize:CGSizeMake(self.scrollView.bounds.size.height *3, self.scrollView.bounds.size.width)];


}
else
{
for(int i=0;i<=2;i++)
{
UIView *currentView = [[self.scrollView subviews] objectAtIndex:i];
[currentView setFrame:CGRectMake((i)*currentView.frame.size.height, 0,[self.scrollView bounds].size.height,[self.scrollView bounds].size.width)];
}

[self.scrollView setContentSize:CGSizeMake(self.scrollView.bounds.size.height * 3, self.scrollView.bounds.size.width)];
}
}
- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation duration:(NSTimeInterval)duration
{
[self.scrollView setContentOffset:CGPointMake([self.scrollView bounds].size.width * currentPageOffset, 0.0f) animated:NO];
}

你可以试试这段代码。使用的值可根据您的要求进行调整。如果您尝试通过旋转自行设置框架,请确保您不使用自动调整大小蒙版,否则一切都会出错。希望这能回答您的问题。

关于objective-c - 在横向模式下向 UIScrollView 添加 subview ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8776040/

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