UIScrollView 在 customView 中不滚动
Posted
技术标签:
【中文标题】UIScrollView 在 customView 中不滚动【英文标题】:UIScrollView does not scroll in customView 【发布时间】:2018-09-14 07:48:52 【问题描述】:我正在制作一个自定义视图,它包含一个UIScrollView
。但是这个滚动视图不滚动。
视图层次结构如下:
- mainView
- UIScrollView
- contentView
A picture for illustration purposes
这是我的自定义视图代码:
class MyCustomView: UIView
@IBOutlet var mainView: UIView!
@IBOutlet weak var scrollView: UIScrollView!
@IBOutlet weak var scrollViewContetnView: UIView!
// MARK: - Methods
required init?(coder aDecoder: NSCoder)
super.init(coder: aDecoder)
self.customInit()
override init(frame: CGRect)
super.init(frame: frame)
self.customInit()
// MARK: Custom
func customInit()
Bundle.main.loadNibNamed("EmoKeyboard", owner: self, options: nil)
self.addSubview(mainView)
self.mainView.frame = self.bounds
self.mainView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
func makeTabItem(count: Int)
for i in 0...count
let icon = UIButton()
icon.frame.size = CGSize(width: 28, height: 28)
icon.center.y = self.scrollViewContentView.center.y
icon.frame.origin.x = 10 + (CGFloat(i) * 28) + (CGFloat(i) * 10)
icon.backgroundColor = UIColor.black
self.scrollViewContentView.addSubview(icon)
我做错了什么?
【问题讨论】:
这很难说,我只看过故事板做这种事情,这需要内容视图被限制在滚动视图的所有边缘,你想要增长的边缘有较低的优先级。 scrollViewContentView 需要更新 frame,scrollView 需要 contentsize。 您是否检查过 mainView 和 scrollView 上的 isUserInteractionEnabled 属性? 【参考方案1】:您必须根据按钮数量或为每个按钮添加约束手动设置scrollView
中的contentSize
。
另一种可能的(!)更简单的方法是将UIStackView
添加为scrollView
的子视图,并为每个按钮添加高度/宽度约束。
【讨论】:
【参考方案2】:添加contentSize
:
scrollView.contentSize = CGSize(width: 0, height: 900) //You can use self view size height to set height means replace 900 according to your requirment
【讨论】:
【参考方案3】:每次将UIButton
添加到scrollViewContentView
时,都应该更新scrollViewContentView
的宽度,因为它的宽度应该等于您添加到其中的所有UIButton items
的宽度加上项目之间的间距总和。
【讨论】:
【参考方案4】:计算内容矩形 ViewController ~> viewDidLayoutSubviews
var contentRect = CGRect.zero
在 contentView.subviews 中查看 contentRect = contentRect.union(view.frame)
contentRect = contentRect.union(填充)
应用矩形
scrollView.contentSize = contentRect.size
【讨论】:
以上是关于UIScrollView 在 customView 中不滚动的主要内容,如果未能解决你的问题,请参考以下文章
使用自动布局向 UIScrollView 添加动态大小的视图(高度)
如何使用 autoLayouts 动态增加 UIScrollView 的高度
UIScrollView 作为 UIView 的子视图不适用于自动布局
Q:当我给一个UIView添加UIScrollView,但是scrollView不能滚动