Swift UIScrollView无需子页面对齐即可捕捉到子视图宽度

用户名

UIScrollView滑动对齐其子视图宽度时如何实现我需要它表现得像pagingEnabled但我不能启用分页,因为我需要可以滑动整个视图来滚动。如果我pagingEnable做不到,因为滚动视图的边界将更改为子视图的宽度。

有没有可能的方法做到这一点。请检查图像以获取更多详细信息

import UIKit

class ViewController: UIViewController{

  var navigationScroller: UIScrollView!
  var contentScroller: UIScrollView!
  var navContainer: UIView!
  var contentContainer: UIView!
  var selfWidth:CGFloat?
  var navigationLabels = ["EVENTS", "MEMBERS", "SECTORS", "ORGANIZATIONS", "SEARCH", "EVENTS", "MEMBERS"]
 private var buttonsTextFontAndSize: UIFont = UIFont(name:     "HelveticaNeue-Light", size: 14)!
override func viewDidLoad() {

    super.viewDidLoad()
    selfWidth = self.view.frame.width
    let frameWidth = self.view.frame.width
    let frameHeight = self.view.frame.height
    //let navscrollPosition = CGFloat( (frameWidth/2) - (75.0/2) )


    navContainer = UIView(frame: CGRectMake(0.0, 75.0, frameWidth, 40.0))
    navContainer.backgroundColor = UIColor(red:0,  green:0.302,  blue:0.522, alpha:1)



    navigationScroller = UIScrollView(frame: CGRectMake(0.0, 0.0, frameWidth, 40.0))
    navigationScroller.backgroundColor = UIColor.clearColor()
    navigationScroller.pagingEnabled = false
    navigationScroller.showsHorizontalScrollIndicator = false
    navigationScroller.showsVerticalScrollIndicator = false
    navigationScroller.clipsToBounds = false
    navigationScroller.contentInset = UIEdgeInsetsZero
    //navigationScroller.userInteractionEnabled = false
    //navigationScroller.

    addNavigationLabels(navigationScroller)
    self.view.addSubview(navContainer)
    navContainer.addSubview(navigationScroller)
    navigationScroller.contentSize = CGSize(width: 150.0 * CGFloat(navigationLabels.count),height: 40.0)
    navigationScroller.contentOffset = CGPoint(x: 170.0, y:0.0)


    contentContainer = UIView(frame: CGRectMake(0.0, 115.0, frameWidth, frameHeight-115.0))
    contentContainer.backgroundColor = UIColor.clearColor()

    contentScroller = UIScrollView(frame: CGRectMake(0.0, 0.0, frameWidth, frameHeight-115.0))
    contentScroller.backgroundColor = UIColor.clearColor()
    contentScroller.pagingEnabled = true
    contentScroller.showsHorizontalScrollIndicator = false
    contentScroller.showsVerticalScrollIndicator = false
    contentScroller.clipsToBounds = true
    contentScroller.contentInset = UIEdgeInsetsZero
    //contentScroller.addSubview(navContainer)
    addContents(contentScroller)
    self.view.addSubview(contentContainer)
    contentContainer.addSubview(contentScroller)
    contentScroller.contentSize = CGSize(width: frameWidth * CGFloat(navigationLabels.count),
        height: frameHeight-115.0)
    //contentScroller.delegate = self
    navigationScroller.delegate = self



}

//MARK: -View Appeared function
override func viewDidAppear(animated: Bool) {
    super.viewDidAppear(true)
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
}

// MARK: -Adding navigation labels fron navigation labels array
private func addNavigationLabels(navScrollView:UIScrollView){
    var buttonsXPosition: CGFloat = 0
    var buttonNumber = 0

    for navLabel in navigationLabels {
        var navButton: UIButton!
        let red = CGFloat(buttonNumber) - 0.9
        let frameWidth = self.view.frame.width
        navButton = UIButton(frame: CGRectMake(buttonsXPosition, 0, frameWidth/3, 40.0))
        navButton.titleLabel!.font = buttonsTextFontAndSize
        navButton.contentHorizontalAlignment = .Center

        navButton.backgroundColor = UIColor(red:red  ,  green:0.114,  blue:0.286, alpha:1)
        navButton.setTitle(navLabel, forState: UIControlState.Normal)
        navButton.addTarget(self, action: "buttonAction:", forControlEvents: UIControlEvents.TouchUpInside)
        navScrollView.addSubview(navButton)

        buttonsXPosition = frameWidth/3 + buttonsXPosition
        buttonNumber++
    }
}

func buttonAction(sender:UIButton!){
    print("pressed")
}

// MARK: -Adding navigation labels fron navigation labels array
private func addContents(contentScroller:UIScrollView){
    var buttonsXPosition: CGFloat = 0
    var buttonNumber = 0
    let frameWidth = self.view.frame.width
    let frameHeight = self.view.frame.height
    for navLabel in navigationLabels {
        var navButton: UIButton!
        navButton = UIButton(frame: CGRectMake(buttonsXPosition, 40.0, frameWidth, frameHeight-155))
        navButton.titleLabel!.font = buttonsTextFontAndSize
        navButton.contentHorizontalAlignment = .Center
        navButton.backgroundColor = UIColor.darkGrayColor()
        navButton.setTitle(navLabel, forState: UIControlState.Normal)
        contentScroller.addSubview(navButton)
        buttonsXPosition = frameWidth + buttonsXPosition
        buttonNumber++

    }
    } 
}

应用程式检视

redent84

您可以实现UIScrollViewDelegate的方法scrollViewWillEndDragging:withVelocity:targetContentOffset:并在其处修改偏移量,以使其减速以匹配所需的宽度。

像这样:

class ScrollSample: NSObject, UIScrollViewDelegate {
    func scrollViewWillEndDragging(scrollView: UIScrollView, withVelocity velocity: CGPoint, targetContentOffset: UnsafeMutablePointer<CGPoint>) {

        let targetOffset = targetContentOffset.memory.x
        // Round the offset to be a multiple of scrollview width
        let roundedOffset = round(targetOffset / scrollView.frame.width) * scrollView.frame.width
        targetContentOffset.memory = CGPoint(x: roundedOffset, y: 0)
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

滚动捕捉到页面部分

来自分类Dev

从ScrollView Swift移除子视图

来自分类Dev

在Swift中以编程方式将UIScrollView滚动到子UIView(子视图)的顶部

来自分类Dev

在Swift窗口视图顶部的子视图

来自分类Dev

view.Layer.CornerRadius在UIView Swift 3 iOS的UIScrollView子视图上不起作用

来自分类Dev

Xcode Swift-修改子视图属性

来自分类Dev

Swift遍历子视图并获取if条件的名称

来自分类Dev

添加子视图控制器Swift

来自分类Dev

Swift hitTest:point withEvent检测子视图

来自分类Dev

Swift:以编程方式更改子视图的高度

来自分类Dev

Swift:无法从XIB访问子视图

来自分类Dev

CollectionView 作为 Swift 中的子视图

来自分类Dev

将排列的视图捕捉到UIStackView的顶部

来自分类Dev

拍照后Viewpager捕捉到错误的页面

来自分类Dev

画布:矩形-捕捉到网格/捕捉到对象

来自分类Dev

如何在Swift的主视图中添加子视图

来自分类Dev

子视图可在Swift中裁剪为父视图

来自分类Dev

视图加载后隐藏子视图图像(使用Swift)

来自分类Dev

UIScrollView中的Swift UITableView(无需滚动)

来自分类Dev

遍历子视图以检查是否为空的UITextField-Swift

来自分类Dev

如何在Swift中使用视图调整子图层的大小?

来自分类Dev

如何使用Swift显示和/或隐藏子视图

来自分类Dev

Swift / iOS子视图未在主线程上立即显示

来自分类Dev

在Swift中将View控制器添加为子视图

来自分类Dev

如何在Swift的子视图类中创建警报?

来自分类Dev

根据UITextView swift的大小向上移动子视图

来自分类Dev

NSBorderlessWindowMask子视图NSTextfield不可键盘编辑的Swift

来自分类Dev

检查子视图在Swift 1.2中是否存在

来自分类Dev

如何在TableView Swift的中心创建XIB子视图

Related 相关文章

热门标签

归档