我正在编写一个应用程序,使用UITabBar作为导航的一部分。 我还使用UIScrollView来呈现比屏幕通常可以处理的更多信息。 因此,我需要设置滚动视图来考虑UITabBar的高度,以便显示所有的信息。 有没有办法来计算UITabBar的height ?
在这里我有一个页面控制工作良好,但点击点不改变页面,所以请帮助在changepage的function: – (void)viewDidLoad { scrollView=[[UIScrollView alloc]initWithFrame:CGRectMake(0, 0, 320, 420)]; scrollView.delegate = self; [self.scrollView setBackgroundColor:[UIColor whiteColor]]; [scrollView setCanCancelContentTouches:NO]; scrollView.indicatorStyle = UIScrollViewIndicatorStyleWhite; scrollView.clipsToBounds = YES; scrollView.scrollEnabled = YES; [scrollView setShowsHorizontalScrollIndicator:NO]; scrollView.pagingEnabled = YES; [self.view addSubview:scrollView]; pageControl=[[UIPageControl alloc]initWithFrame:CGRectMake(0, 420, 320, 40)]; [pageControl addTarget:self action:@selector(changepage:) forControlEvents:UIControlEventTouchUpInside]; [self.view addSubview:pageControl]; UIView *blueView = [[UIView alloc] init]; blueView.frame = CGRectMake(0, 0, 640, […]
我正在调整一个详细视图控制器的状态,就在它被推上一个navigationController : [self.detailViewController detailsForObject:someObject]; [self.navigationController pushViewController:self.detailViewController animated:YES]; 在DetailViewController的scrollView驻留。 我根据传递的对象调整了哪些内容: – (void)detailsForObject:(id)someObject { // set some textView's content here self.contentView.frame = <rect with new calculated size>; self.scrollView.contentSize = self.contentView.frame.size; self.scrollView.contentOffset = CGPointZero; } 现在,这一切工作,但scrollView在导航控制器的滑入animation中调整它的contentOffset 。 contentOffset将被设置为最后一个contentSize和新计算的之间的差异。 这意味着第二次打开detailsView时,细节会滚动到一些不需要的位置。 即使我明确地将contentOffset设置为CGPointZero 。 我发现在- viewWillAppear中重置contentOffset不起作用。 我能想到的最好的方法是重置viewDidAppear的contentOffset,从而引起内容的明显上下移动: – (void)viewDidAppear:(BOOL)animated { self.scrollView.contentOffset = CGPointZero; } 有没有一种方法来防止一个UIScrollView的contentSize更改时调整其contentOffset ?
我试图在我的应用程序中创build一个类似跳板的界面。 我试图使用UIButtons添加到UIScrollView。 我运行的问题是与button没有通过任何接触的UIScrollView – 如果我试图轻弹/幻灯片,碰巧按下的button,它不注册的UIScrollView,但如果我轻弹之间的空间button它将工作。 如果我触摸它们,button会点击/工作。 是否有一个属性或设置强制button将触摸事件发送到其父(superview)? 在添加UIScrollView之前,button是否需要添加到其他东西? 这是我的代码: //init scrolling area UIScrollView *scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, 480, 480)]; scrollView.contentSize = CGSizeMake(480, 1000); scrollView.bounces = NO; scrollView.delaysContentTouches = NO; //create background image UIImageView *rowsBackground = [[UIImageView alloc] initWithImage:[self scaleAndRotateImage:[UIImage imageNamed:@"mylongbackground.png"]]]; rowsBackground.userInteractionEnabled = YES; //create button UIButton *btn = [[UIButton buttonWithType:UIButtonTypeCustom] retain]; btn.frame = […]
我有一个滚动视图,用来滚动时,它没有button。 现在它,当拖动鼠标(在模拟器上)什么都没有发生(我认为是因为button被推)。 我怎样才能做到这一点?
使用严格的自动布局环境缩放UIScrollView似乎不起作用。 这是特别令人沮丧的,因为iOS 6的发行注记当然让我相信它应该写在这里的“纯自动布局方法”这里http://developer.apple.com/library/ios/#releasenotes/General/RN- iOSSDK-6_0 / _index.html 我看了第202,228和232期的WWDC 2012幻灯片,并没有看到这个答案。 我在网上看到的唯一一个专门针对这个问题的问题是UIScrollView缩放与自动布局 ,但它不提供代码的问题,没有答案。 这个用户https://stackoverflow.com/users/341994/matt已经给了UIScrollView的自动布局问题很多很好的回答,甚至连接到git hub上的代码,但是我一直没能find任何答案。 我试图把这个问题归结为绝对的最低限度来说明问题。 我创build了一个新的单视图应用程序与故事板,并没有在界面生成器的变化。 我添加了一个大的图片文件到项目“pic.jpg”。 SVFViewController.h #import <UIKit/UIKit.h> @interface SVFViewController : UIViewController <UIScrollViewDelegate> @property (nonatomic) UIImageView *imageViewPointer; @end SVFViewController.m #import "SVFViewController.h" @interface SVFViewController () @end @implementation SVFViewController – (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. […]
今天在我的创作时间,我做了一些非常全面的研究,如何从UIScrollView中窃取触摸,并立即将它们发送到特定的子视图,同时保持其他滚动视图的默认行为。 考虑在UITableView中有一个UIPickerView。 默认行为是,如果您将手指拖动到选取器视图上,滚动视图将滚动并且选取器视图将保持不变。 我尝试的第一件事是重写 – (BOOL)touchesShouldCancelInContentView:(UIView *)view 并且不允许UIScrollView取消select器视图内的触摸。 这工作,但它有一个不愉快的副作用。 您希望拾取器视图立即作出响应,因此您将不得不将delaysContentTouches设置为NO。 问题是你不希望表格视图的其余部分立即作出响应,因为如果这样的话,表格视图单元格在滚动开始之前总是会高亮几毫秒。 我尝试的第二件事是重写 – (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event 因为我已经读过滚动视图总是返回自己,所以它会“窃取”其子视图中的触摸,并且如果它们对滚动视图不感兴趣,那么将它们发送到子视图。 但是,这不再是事实。 UIScrollView的hitTest的默认实现:withEvent:实际返回应该接收触摸的子视图。 相反,它使用手势识别器来拦截触摸。 所以我尝试的第三件事是实现我自己的手势识别器,并导致它失败,如果触摸是在select器视图之外,否则成功。 然后我设置所有滚动视图的手势识别器失败,除非我的手势识别器失败,使用下面的代码: for (UIGestureRecognizer * gestureRecognizer in self.tableView.gestureRecognizers) { [gestureRecognizer requireGestureRecognizerToFail:myRecognizer]; } 这实际上是从滚动视图中窃取触摸,但是拾取器视图从不接收它们。 所以我虽然也许我可以发送我的手势识别器收到的所有触摸使用此代码: – (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { for (UITouch *touch in touches) [touch.view touchesBegan:touches withEvent:event]; } 上面的代码是一个简化版本。 我还要确保视图是一个select器视图(或其中一个子视图),并为上述手势识别器设置适当的状态。 我也做了同样的取消,结束和移动。 但是,select器视图仍然没有响应。 在回到我的正常工作之前,我还尝试了最后一件事。 […]
我一直在很难findUIScrollView的好例子。 即使苹果的UIScrollView套件,我觉得有点欠缺。 我正在寻找一个教程或示例集,它向我展示了如何创build类似于iPhone Safari选项卡滚动的function,当您从一个浏览器窗口缩小并可以轻弹到其他人。 但是我很难在滚动视图中显示任何旧视图。 我有一个视图设置了一个图像,但是当我把它添加到滚动视图时,我只会得到一个黑色的矩形,无论我把它放在视图中。 任何链接或代码片段将是伟大的!
这很奇怪,我想知道有没有人有任何想法? 我试图滚动一个UIScrollView来响应iPad上的一个button。 如果我做: CGPoint currentOff = scrollView.contentOffset; currentOff.x+=240; [scrollView setContentOffset:currentOff animated: NO]; 滚动视图跳转到所需的位置,但我希望它滚动。 但是,当我这样做的时候: CGPoint currentOff = scrollView.contentOffset; currentOff.x+=240; [scrollView setContentOffset:currentOff animated: YES]; 那么它什么都不做! 我有另一个滚动视图正常工作,并按预期响应setContentOffset:YES ,所以我很困惑。 任何关于为什么滚动可能不会发生的想法是最受欢迎的! 此外, – (void)scrollViewDidScroll:(UIScrollView *)sender在使用animated:YES时没有收到任何内容,但是当使用animated:NO被使用!
我试图创build完全相同的效果,在AppStore应用程序中查看屏幕截图:在UITableView中,我有自定义的UITableViewCell的子类。 其中一个是为了展示一些产品的预览,比如说4张图片。 我希望它们能够像AppStore一样展示应用程序的屏幕截图:在带有UIPageControl的水平UIScrollView中。 所以我添加我的UIScrollView和我的UIPageControl到我的UITableViewCell,就像这样: @implementation phVolumePreviewCell – (id)init { if (self = [super initWithStyle:UITableViewCellStyleDefault reuseIdentifier:kVolumePreviewCellIdentifier]) { [self setAccessoryType:UITableViewCellAccessoryDisclosureIndicator]; [self setSelectionStyle:UITableViewCellSeparatorStyleNone]; previews = [[NSMutableArray alloc] initWithCapacity:4]; for (int i = 0; i < 4; i++) { [previews addObject:@"dummy"]; } scrollView = [[UIScrollView alloc] initWithFrame:CGRectZero]; [scrollView setPagingEnabled:YES]; [scrollView setBackgroundColor:[UIColor grayColor]]; [scrollView setIndicatorStyle:UIScrollViewIndicatorStyleBlack]; [scrollView setShowsHorizontalScrollIndicator:YES]; [scrollView setBounces:YES]; [scrollView […]