2016-11-18 97 views
1

我在一個tableview單元中有一個color slider,該單元從標籤延伸到單元格的尾部錨點。我遇到的問題是當設備方向更改顏色滑塊不更新其約束並不再擴展單元格的全部長度。以下是我的代碼來設置顏色滑塊上的約束。下面是顯示我遇到的問題的圖像。如果我在呈現此場景時手機已處於橫向方向,則顏色滑塊會根據需要延伸單元格的整個長度。但是,如果我在查看此場景時切換到風景,滑塊將如下所示。如果有幫助,這裏是full code約束條件不隨設備方向更改而更新

Slider Portrait Slider Landscape

func configureColorSlider() { 
    let colorSlider = ColorSlider() 
    let xCell = colorCell.contentView.bounds.width 
    let yCell = colorCell.contentView.bounds.height 
    colorSlider.frame = CGRect(x: xCell/4, y: yCell/4, width: 200, height: 24) 
    colorSlider.orientation = .horizontal 
    colorSlider.addTarget(self, action: #selector(ConfigureTimestampTableViewController.changedColor(_:)), for: .valueChanged) 

    colorCell.contentView.addSubview(colorSlider) 

    colorSlider.translatesAutoresizingMaskIntoConstraints = false 
    NSLayoutConstraint.activate([colorSlider.leadingAnchor.constraint(equalTo: colorLabel.trailingAnchor, constant: 8), 
           colorSlider.trailingAnchor.constraint(equalTo: colorCell.contentView.trailingAnchor, constant: -8), 
           colorSlider.topAnchor.constraint(equalTo: colorCell.contentView.topAnchor, constant: 8), 
           colorSlider.bottomAnchor.constraint(equalTo: colorCell.contentView.bottomAnchor, constant: -8) ]) 


    } 
+0

使用'CALayers'是'ColorSlider'的內容嗎?他們不更新他們的大小/位置與自動佈局。 –

+0

它的確如此。使用CAGradientLayer()繪製顏色滑塊。這一定是問題。如果我不能使用自動佈局,您是否有建議調整滑塊大小? – chickenparm

回答

1

CALayers不會響應被調整到它們的父UIView調整大小,是否通過自動佈局或手動。

您只需將代碼添加到ColorSlider即可在ColorSilider的大小/位置更改時更新圖層。幸運的是,在UIView上有一個專門用於此的方法。

override func layoutSubviews() { 
    super.layoutSubviews() 
    gradientLayer.frame = bounds 
} 
+0

謝謝!當我添加Xcode時,Xcode讓我添加了這個功能,但它工作正常!如果沒有公開,它會給我提示「覆蓋實例方法必須與其包含的類型一樣可訪問」 – chickenparm

+0

這是正確的。如果「ColorSlider」是公開的,那麼您覆蓋的任何方法都必須是公共的。 –