我正在设计一个具有滚动视图的页面,在它上面是一个表格视图(滚动禁用).为此,我在这个问题中引用了答案 - 使UITableView不可滚动并调整高度以容纳所有单元格,但未成功.
视图的层次结构以及提供的约束 -
- 主要观点
-Scroll视图
固定到主视图的所有边(0,0,0,0),约束边距
- 内容视图
固定为滚动视图(0,0,0,0),与主视图的宽度相等,与主视图的高度相等(优先级 - 250)
- 内容视图中的表视图
滚动禁用,从所有边都有50个点空间,高度(> =),底部间距50(关系> =).我放置大于等于动态增加高度.
现在,当我填充表格视图时,我将代码用作
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
{
let cell = tableview.dequeueReusableCellWithIdentifier("cellreuse", forIndexPath: indexPath)
cell.textLabel?.text = name[indexPath.row]
tableview.frame.size = tableview.contentSize
return cell
}
Run Code Online (Sandbox Code Playgroud)
因此,当我运行我的代码时,它增加了tableview框架,但没有拉伸内容大小,它只是变得奇怪,因为我的滚动视图没有滚动到表视图的末尾,我的表视图也不遵循自动布局约束.
我的视图层次结构就是这样
PhotoDetailViewController.swift
View
UIScrollView
UIImageView
Run Code Online (Sandbox Code Playgroud)
我使用storyboard设置它,并向UIScrollView添加四个约束(top = 0,bottom = 0,leading = 0,tailing = 0),四个约束(top = 0,bottom = 0,leading = 0,tailing = 0)到UIImageView,但有两个错误说
"ScrollView has ambiguous scrollable content width"
"ScrollView has ambiguous scrollable content height"
Run Code Online (Sandbox Code Playgroud)
我知道这是因为我没有设置UIScrollView contentSize,但我想要做的是异步加载PHAsset中的照片,所以我只能在运行时获取照片大小.所以问题是:
1:鉴于照片大小只能在运行时获取,如何解决"模糊可滚动内容"错误?
2:我应该在哪个View的生命周期方法中调用PHImageManager.requestImageForAsset?因为我认为我应该以编程方式设置UIScrollView contentSize,但什么时候?
使用PhotoDetailViewController.swift进行更新
import UIKit
import Photos
class PhotoDetailViewController : UIViewController {
@IBOutlet weak var scrollView: UIScrollView!
@IBOutlet weak var imageViewBottomConstraint: NSLayoutConstraint!
@IBOutlet weak var imageViewLeadingConstraint: NSLayoutConstraint!
@IBOutlet weak var imageViewTopConstraint: NSLayoutConstraint!
@IBOutlet weak var imageViewTrailingConstraint: NSLayoutConstraint!
var devicePhotosAsset : PHFetchResult!
var index …Run Code Online (Sandbox Code Playgroud) 我一直在寻找一个(工作)教程的日子,甚至是一个使用UIScrollView垂直滚动的示例应用程序,这是编程的.有很多关于使用故事板的教程,让我感到茫然.
我查看了苹果的文档,他们的"指南"仍然没有一个坚实的例子或暗示从哪里开始.
我到目前为止所尝试的是做了以下一些事情.
让我的视图成为一个直接在课堂上的scrollview
let scrollView = UIScrollView(frame: UIScreen.mainScreen().bounds)
Run Code Online (Sandbox Code Playgroud)
然后将其分配给我的viewDidLoad函数中的视图
self.view = scollView
Run Code Online (Sandbox Code Playgroud)
试图更改内容大小.
self.scrollView.contentSize = CGSize(width:2000, height: 5678)
Run Code Online (Sandbox Code Playgroud)
试图启用滚动
scrollView.scrollEnabled = true
Run Code Online (Sandbox Code Playgroud)
以编程方式执行此操作时我能找到的最后一个建议
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
scrollView.frame = view.bounds
}
Run Code Online (Sandbox Code Playgroud)
目前我没有尝试开始将我的对象添加到scrollview,(我不需要缩放,只需要进行垂直滚动),但我没有设法得到任何工作:(事实上,运行应用程序与那些添加只会导致UIProblems,屏幕向上移动奇怪,它不适合我的屏幕的整个宽度?我尝试修复使框架边界等于宽度,但仍然无法正常工作
我没有收到任何错误.
我很想看到一个可以垂直滚动的示例viewcontroller!或任何帮助将非常感谢!
编辑灾难的屏幕截图,尝试使我的视图可滚动导致.
http://i.stack.imgur.com/gQ0SC.png
(链接而不是图像,由于缺少直接放置图像的点.)
(我将滚动视图背景设置为红色,看看它是否显示正确.它似乎是.但我不能滚动到任何地方
正如评论中所建议的那样,我没有使用self.view = self.scrollview,而是尝试将scrollview添加为self.view的子视图,但没有取得积极的结果.
编辑2:
加入
scrollView.contentSize = CGSize(width:2000, height: 5678)
Run Code Online (Sandbox Code Playgroud)
to viewDidLayoutSubviews,如下面的评论中所建议的那样使我的视图可滚动!
然而,由于某种原因,我的布局仍然看起来像一个完全混乱(看起来它应该是,在我使它可滚动之前).
这是我的topBar(蓝色)的示例约束,它应该占据整个水平空间.
self.scrollView.addConstraints(
NSLayoutConstraint.constraintsWithVisualFormat(
"H:|[topBar]|", options: nil, metrics: nil, views: viewsDictionary))
Run Code Online (Sandbox Code Playgroud)
任何想法为什么这不起作用?
我已经定义了所有视图并superview在视图控制器中设置了它的约束,但现在我想将所有这些子视图放入a中Scrollview,我发现所有这些约束都消失了.有没有什么好方法可以让它更容易,而不是重置所有这些约束?
以下图片如下:
现在,当我将所有这些视图拖入时ScrollView,所有约束都会消失
(对不起这两个链接是截图,我没有10个声望发布图片)
我正在使用swift来构建一个应用程序.我想使用storyboard向我的视图控制器添加一些内容.
我已经将所有内容放在scrollview中并设置了特定的高度,但是当我运行应用程序时,scrollview的设置总是比视图底部的按钮长
我想滚动视图停在按钮后面
请帮助我如何解决这个问题
谢谢
滚动后
为了您的信息,请忽略"评论家"和提交按钮之间的空白区域,因为实际上它们之间有UITextView但不可见(仍然尝试添加一些边框)
这些是我的故事板预览
在将视图添加到我的应用程序之前,我已经创建了一个小型演示游乐场来使其工作。
我有一个滚动视图,它将包含许多水平滚动的按钮。我知道这些按钮需要进入滚动视图中的容器视图,并且也创建了它。我最初使用自动布局约束来创建所有这些,但现在尝试使用常量来确保内容视图大于滚动视图。但是,按钮仍然不会滚动......我错过了什么吗?滚动视图不适用于自动布局吗?
我也在我的 iPad 上以编程方式执行所有这些操作,因此不幸的是,使用界面构建器的解决方案不是一种选择...
这是完整的代码:
import UIKit
import PlaygroundSupport
class FilterViewController: UIViewController {
var filterView: UIView!
var scrollView: UIScrollView!
var containerView: UIView!
override func loadView() {
filterView = UIView()
view = filterView
view.backgroundColor = #colorLiteral(red: 0.909803926944733, green: 0.47843137383461, blue: 0.643137276172638, alpha: 1.0)
scrollView = UIScrollView()
scrollView.backgroundColor = #colorLiteral(red: 0.474509805440903, green: 0.839215695858002, blue: 0.976470589637756, alpha: 1.0)
view.addSubview(scrollView)
scrollView.translatesAutoresizingMaskIntoConstraints = false
scrollView.topAnchor.constraint(equalTo:view.topAnchor, constant:40).isActive = true
scrollView.leadingAnchor.constraint(equalTo:view.leadingAnchor).isActive = true
scrollView.widthAnchor.constraint(equalTo:view.widthAnchor).isActive = true
scrollView.heightAnchor.constraint(equalToConstant: 200).isActive = true
scrollView.isScrollEnabled = true
containerView = UIView() …Run Code Online (Sandbox Code Playgroud) uiscrollview ios programmatically-created swift swift-playground
下面是我当前视图控制器的屏幕截图.
我正在尝试解决的问题是当前容器视图文本被固定到UIView的顶部.
我有这样设置在较小的设备上它有一个滚动视图,这样我最容易可视化和布局元素.
所以我的目标是在UIView /容器视图(左侧)上设置最大高度,使其最大高度为190px(因为这是内容最高的).
我尝试了上面的解决方案,但它给了我一个错误说inequality constraint ambiguity.
我的目标是最大高度为190px,水平和垂直居中.
我怎样才能做到这一点?
编辑
更改底部空间以管理订阅=而不是> =会产生以下结果.
ios ×7
uiscrollview ×5
swift ×4
autolayout ×2
uiview ×2
xcode ×2
constraints ×1
contentsize ×1
iphone ×1
storyboard ×1
uiimageview ×1
uistoryboard ×1
uitableview ×1
xcode11 ×1