- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我试图复制在 iOS 应用 Rdio 中看到的屏幕大小调整行为。有问题的屏幕提供了所选专辑的概览,并在上半部分包含一个 UIView,在下半部分包含一个 UITableView。当 tableView 滚动时,它首先向上调整大小以填充屏幕,然后在达到最大高度后开始正常滚动其内容。
经过一番搜索,我发现了这个问题:Dragging UITableView这基本上要求相同的东西,但是它接受的方法与我最初的想法和试验相同,即使用 UIPanGestureRecognizer 并根据平移的平移调整 tableviews 高度。
这不提供我正在寻找的行为。使用此方法仅允许您静态向上或向下拖动 tableviews 的高度,并且它会增加 panGesture 覆盖 tableViews 的问题,从而阻止滚动内容。
Rdio 应用的调整大小行为和感觉完全就像一个 UIScrollView,它有惯性。您可以一直拖动它,向上或向下轻拂它,然后它会平滑地调整大小。当 tableView 达到其全尺寸或原始尺寸的一半时,剩余的惯性似乎传递到 tableview 上,导致单元格像通常那样滚动。我知道他们一定是在操纵 UIScrollViews,我只是不知道如何操作。
最后一点,我最终会在此屏幕上使用 AutoLayout,所以我想知道这将如何潜在地阻碍或帮助这种情况。
更新
到目前为止,这种方法使我最接近我正在寻找的行为。向上轻弹 tableView 的行为与我想要的完全一样(随着惯性调整大小并在达到最大高度时继续滚动),尽管灵敏度低于我想要的。然而,向下轻弹不会提供惯性并立即停止。
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
CGRect scrollViewFrame = scrollView.frame;
CGFloat scrollViewYOffset = scrollView.contentOffset.y;
if (scrollViewFrame.origin.y <= kTableViewMaxYOrigin || scrollViewFrame.origin.y <= _originalTableViewFrame.origin.y)
{
scrollViewFrame.origin.y -= scrollViewYOffset;
if(scrollViewFrame.origin.y >= kTableViewMaxYOrigin && scrollViewFrame.origin.y <= _originalTableViewFrame.origin.y)
{
scrollViewFrame.size.height += scrollViewYOffset;
scrollView.frame = scrollViewFrame;
scrollView.contentOffset = CGPointZero;
}
}
}
最佳答案
我制作了一个使用自动布局的版本。我花了一段时间试错才把这个弄对!
请使用评论,如果答案不清楚,请问我。
在 viewDidLoad
中保存布局约束的初始高度,确定您希望 ScrollView 的最低高度。
- (void)viewDidLoad
{
...
_initialTopLayoutConstraintHeight = self.topLayoutConstraint.constant;
...
}
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
BOOL leaveScrollAlone = self.topLayoutConstraint.constant == _initialTopLayoutConstraintHeight && scrollView.contentOffset.y <= 0;
if (leaveScrollAlone)
{
// This allows for bounce when swiping your finger downwards and reaching the stopping point
return;
}
// Do some capping of that layout constraint to keep it from going past the range you want it to be.
// In this case, I use self.topLayoutGuide.length so that my UICollectionView scales all the way until
// it hits the bottom of the navigation bar
CGFloat topLayoutConstraintLength = _initialTopLayoutConstraintHeight - scrollView.contentInset.top;
topLayoutConstraintLength = MAX(topLayoutConstraintLength, self.topLayoutGuide.length);
topLayoutConstraintLength = MIN(topLayoutConstraintLength, _initialTopLayoutConstraintHeight);
self.topLayoutConstraint.constant = topLayoutConstraintLength;
// Keep content seemingly still while the UICollectionView resizes
if (topLayoutConstraintLength > self.topLayoutGuide.length)
{
scrollView.contentInset = UIEdgeInsetsMake(scrollView.contentInset.top + scrollView.contentOffset.y,
scrollView.contentInset.left,
scrollView.contentInset.bottom,
scrollView.contentInset.right);
scrollView.contentOffset = CGPointZero;
}
// This helps get rid of the extraneous contentInset.top we accumulated for keeping
// the content static while the UICollectionView resizes
if (scrollView.contentOffset.y < 0)
{
self.topLayoutConstraint.constant -= scrollView.contentOffset.y;
scrollView.contentInset = UIEdgeInsetsMake(scrollView.contentInset.top + scrollView.contentOffset.y,
scrollView.contentInset.left,
scrollView.contentInset.bottom,
scrollView.contentInset.right);
}
// Prevents strange jittery artifacts
[self.view layoutIfNeeded];
}
关于ios - 调整 UITableView 的大小,如 Rdio iOS 应用程序中所示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18685888/
我需要创建一个弹出框,与 Rdio 在其网站上的做法非常相似。在 Rdio 上,当您单击用户的缩略图时,会出现一个带有用户个人资料详细信息的弹出框。我想知道我怎么能完成这样的事情。我正在用 Ruby
我正在尝试重新创建 rdio ( http://rdio.com) 为他们的播放器页脚创建的脚本。当您单击页脚时,面板会很好地向上滑动并显示更多内容。另一个例子是teehan lax;顶部下拉菜单 h
http://www.rdio.com 给我留下了深刻的印象用户界面。 (先登录) 我想知道他们如何重新组织中央 div 中按行填充的专辑封面的数量,该数量由屏幕尺寸决定。 (尝试按比例放大和缩小)。
对于为什么我在客户端的 Javascript 中收到“无法加载资源:服务器响应状态为 400(错误请求)”有什么想法吗? (客户端 ID 模糊,我通过注册 Rdio 站点有一个用于 Oauth2.0
当您访问http://www.rdio.com/#/aboutus/时例如,您会看到他们的“关于我们”页面加载,现在当您将鼠标悬停在或检查页脚中的“关于我们”链接时,它只是指向/aboutus。我还检
我为自己构建了一个小型桌面应用程序,用于记录来自 iTunes 和 Rdio 的收听情况,以便我可以根据我随着时间的推移听音乐的方式创建强大的播放列表,但它要求每个轨道都有一个永远不会改变的唯一 ID
我正在研究 Rdio 的 iOS SDK。我已经在此处概述的“入门”中正确设置了所有内容 (http://www.rdio.com/developers/docs/libraries/ios/)。应用
问题 这发生在我没有访问源代码的两个静态库中。 我正在尝试将 Rdio SDK 安装到我的项目中(使用 these instructions )。我的项目已经使用了很多谷歌的服务,而且Rdio和谷歌之
我想创建一个包含大量混音带的 Rails 应用程序,用户可以收听和下载这些混音带(例如 datpiff.com)。所有的混音带都会由我上传。每个混音带都有自己的页面,包括标题、艺术家姓名、封面等。 我
我正在尝试获取“hello world”app用于 Rdio Web 播放 API 的工作。我克隆了该存储库并打开了 hello.html 文件。当我点击播放时,出现以下错误: Uncaught Ty
谁能指出我实现 Spotify 和 Rdio 用于其“正在播放”底部工具栏的功能类型的正确方向?可以触摸并拖动 View Controller 到另一个 View Controller 的顶部。整个过
我试图复制在 iOS 应用 Rdio 中看到的屏幕大小调整行为。有问题的屏幕提供了所选专辑的概览,并在上半部分包含一个 UIView,在下半部分包含一个 UITableView。当 tableView
我是一名优秀的程序员,十分优秀!