Auto layout、子view側でのframe取得方法
自作viewをStoryBoard上でカスタムクラスに設定して、viewController側でframe設定用のメソッドを呼び出しています。
出来れば子view側で自動でframeを取得してsubviewのframeを設定できるようにしたいです。
子view側でAutoLayout後のframeを検知して取得するような方法は存在するでしょうか?
コード - 自作view
import UIKit
final class SLSegmentedView: UIView {
var segmentedControl: CommonSegmentedControl?
var contentsDivieder: ContentsDivider?
override init(frame: CGRect) {
super.init(frame: frame)
commonInit()
setSubviewsFrame(frame)
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
commonInit()
}
private func commonInit(){
segmentedControl = CommonSegmentedControl(sectionTitles: sectionTitles)
segmentedControl!.addTarget(MasterViewController(),
action: #selector(MasterViewController.segmentedControlChangedValue(_:)),
forControlEvents: .ValueChanged)
contentsDivieder = ContentsDivider()
self.addSubview(segmentedControl!)
self.addSubview(contentsDivieder!)
}
func reloadTitles(){
segmentedControl?.sectionTitles = self.sectionTitles
segmentedControl?.layoutIfNeeded()
}
func setSubviewsFrame(frame: CGRect){
segmentedControl?.frame = frame
contentsDivieder?.containerFrame = frame
}
var sectionTitles: [String]{
let df = NSDateFormatter()
let userDefaults = NSUserDefaults.standardUserDefaults()
let saturday = userDefaults.valueForKey("Saturday") as! Bool
var aSectionTitles: [String]
if saturday == true{
aSectionTitles = [NSLocalizedString("All", comment: ""),
df.shortWeekdaySymbols[1],
df.shortWeekdaySymbols[2],
df.shortWeekdaySymbols[3],
df.shortWeekdaySymbols[4],
df.shortWeekdaySymbols[5],
df.shortWeekdaySymbols[6]]
}else{
aSectionTitles = [NSLocalizedString("All", comment: ""),
df.shortWeekdaySymbols[1],
df.shortWeekdaySymbols[2],
df.shortWeekdaySymbols[3],
df.shortWeekdaySymbols[4],
df.shortWeekdaySymbols[5]]
}
return aSectionTitles
}
}
コード - view controller
@IBOutlet weak var controlView: SLSegmentedView!
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
controlView.setSubviewsFrame(controlView.bounds)
}
上手くいきましたので当該コードを載せておきます
override func layoutSubviews() {
super.layoutSubviews()
segmentedControl?.frame = self.bounds
contentsDivieder?.containerFrame = self.bounds
}