无法设置滚动的宽度查看iOS Swift

我无法将scrollView的宽度设置为屏幕的宽度。 有人可以请指导我去哪里错了吗?

在这里输入图像说明

这是我如何启用滚动视图

// SCROLL VIEW var scrollView = UIScrollView() var contentView = UIView() override func viewDidLoad() { super.viewDidLoad() screenHeight = screenSize.height screenWidth = screenSize.width // SCROLL VIEW scrollView = UIScrollView(frame: view.bounds) // Here I am adding all my labels and textview fields to content view contentView.addSubview(problemDescriptionStackView) .... // Adding content view to the scrollView scrollView.addSubview(contentView) // Pinning the contentView to the scroll view pinView(contentView, to: scrollView) self.view.addSubview(scrollView) // Here I am Setting the constraints for all the items in the contentView .... } 

//下面的函数用于将一个视图固定到另一个视图

  public func pinView(_ view: UIView, to scrollView: UIScrollView) { view.translatesAutoresizingMaskIntoConstraints = false view.pin(to: scrollView) } public func pin(to view: UIView) { NSLayoutConstraint.activate([ leadingAnchor.constraint(equalTo: view.leadingAnchor), trailingAnchor.constraint(equalTo: view.trailingAnchor), topAnchor.constraint(equalTo: view.topAnchor), bottomAnchor.constraint(equalTo: view.bottomAnchor) ]) } 

使用下面的方法来获得iPhone屏幕的确切大小。 希望用这个方法,你的问题解决了。 如果你有疑问请在这里评论。

 //MARK: - Main Screen Width func getScreenWidth() -> CGFloat{ return UIScreen.main.bounds.size.width } //MARK: - Main Screen Height func getScreenHeight() -> CGFloat{ return UIScreen.main.bounds.height } 

viewDidLoadstoryboard或者nib载入你的UI。 大小取决于您在Interface Builderselect的内容。

您可以在viewWillAppear初始化ui,并添加一个variablesisInitialized

 override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) if !isInitialized { isInitialized = true // do your stuff } } 

Scroll.contentSize = CGSize(width:self.view.frame.size.width,height:self.view.frame.size.height)

使一个子视图水平居中(使用自动布局约束)到界面生成器中的滚动视图或通过编程

好的,有几种方法可以解决这个问题:

1.-在故事板上进入你的视图,你将要在你的滚动视图中按住左键并在主视图上释放它,然后你将点击等宽

2.-在视图中,负载放置

 self.scrollViewName.frame.size.width = self.view.frame.width 

你可以在scrollView上设置contentInset,它将调整scrollView内的滚动区域的内容大小,这里是一个简单的例子

 scrollView.contentInset UIEdgeInsets(top: 0, left: 0, bottom: 0, right: padding) 

这应该够了吧 :)

由于您是从viewDidLoad设置约束,但视图在此方法中布局不正确。 视图布局完成后,您应该设置约束条件。 所以你应该设置约束:

override func viewDidLayoutSubviews() { // set constraints here }

你可以使用一个variables来检查是否已经添加了约束。

尝试下面的代码,可能是因为自动调整你无法更改框架,所以尝试在viewDidAppear方法中编写下面的代码

 override func viewDidAppear(_ animated: Bool) { super.viewDidAppear(animated) // Set the frame of scrollview self.scrollViewName.frame = CGRectMake(self.scrollViewName.frame.origin.x, self.scrollViewName.frame.origin.y, self.view.frame.size.width, self.view.frame.size.height); } 

固定您的scrollView view而不是设置其frame

添加一个约束来设置contentView的宽度等于scrollView的宽度:

 contentView.widthAnchor.constraint(equalTo: scrollView.widthAnchor).isActive = true