2016-02-22 86 views
1

我正在創建一個小型聊天應用程序,其中使用UIScrollView的自定義子類來顯示消息。這個程序只是爲了練習,所以我不想使用第三方庫。我通過Apple閱讀technical note 2154和幾個教程來解釋這個,我正在實現這個UIScrollView通過自動佈局,我的實現幾乎可以工作,但我的UIScrollView的內容視圖似乎並沒有填滿所有可用的空間。UIScrollView動態高度內容(自動佈局)不能填滿整個空間

呈現了滾動的代碼是:

public class ChatView: UIScrollView { 
    private var contentView: UIView 

    ... 

    // This get called by all the init methods. contentView is already created (contentView = UIView()) 
    private func setupViews() { 
     self.translatesAutoresizingMaskIntoConstraints = false 
     contentView.translatesAutoresizingMaskIntoConstraints = false 

     self.addSubview(contentView) 

     let constraint1 = NSLayoutConstraint(item: self, attribute: .Top, relatedBy: .Equal, toItem: contentView, attribute: .Top, multiplier: 1.0, constant: 0.0) 
     let constraint2 = NSLayoutConstraint(item: self, attribute: .Bottom, relatedBy: .Equal, toItem: contentView, attribute: .Bottom, multiplier: 1.0, constant: 0.0) 
     let constraint3 = NSLayoutConstraint(item: self, attribute: .Width, relatedBy: .Equal, toItem: contentView, attribute: .Width, multiplier: 1.0, constant: 0.0) 
     let constraint4 = NSLayoutConstraint(item: self, attribute: .CenterX, relatedBy: .Equal, toItem: contentView, attribute: .CenterX, multiplier: 1.0, constant: 0.0) 

     self.addConstraints([constraint1, constraint2, constraint3, constraint4]) 

     self.layoutIfNeeded() 

     // Later, the messages are added to the contentView. I don't think is relevant to see the exact code (but I can post it if needed) 
     // Each message is added using autolayout and the constraints only reference the messages themselves and contentView 
    } 
} 

當我添加一個ChatView到(使用故事板)我的視圖控制器,其四邊固定到觀點這不是他的層次,下面的問題發生的情況:

Screenshot of the problem

在圖像中,所述滾動視圖不能向上滾動任何更多。似乎有一個空間應該填補,而不是。如果向下滾動,我會遇到完全相同的問題,但空白空間低於內容。在下面的圖片,你可以看到,內容查看比ChatView本身最小:

The debugger view of the problem wo constraints

而且同一視圖層次結構,但與所示的限制:

The debugger view of the problem with constraints

兩個圖像中在後臺查看是ChatView,所選的是contentView。我一直無法確定內容視圖不包含完整的ChatView空間的原因。

在此先感謝!

回答

1

我終於在another stackoverflow question搜索不同的問題時偶然發現了答案。關鍵是打開故事板並將容器視圖控制器「AdjustsScrollViewInsets」設置爲「NO」。

在代碼它只是(視圖控制器內):

self.automaticallyAdjustsScrollViewInsets = NO; 
相關問題