无法设置滚动的宽度查看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 }
viewDidLoad
从storyboard
或者nib
载入你的UI。 大小取决于您在Interface Builder
select的内容。
您可以在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