2016-08-10 3 views
3

Gibt es eine Möglichkeit, UISegmentedControl mit mehreren Textzeilen in iOs 9+ zu erstellen?UISegmentierterControl-Text mit mehreren Zeilen

Bisher habe ich tryed:

  1. Varianten von SO Themen: This,thisand this one
  2. eine Verlängerung Fabrikat:

    extension UISegmentedControl 
    { 
        func makeMultiline(numberOfLines: Int) 
        { 
         for segment in self.subviews 
         { 
          let labels = segment.subviews.filter { $0 is UILabel } // [AnyObject] 
          labels.map { ($0 as UILabel).numberOfLines = numberOfLines }  
         } 
        } 
    } 
    
  3. vererben UISegmentedControl und setzen neue Klasse SegmentedControl im Identity Inspector

  4. Set Bild mit Text anstelle von Titel und Wechselrahmen von UISegmentedControl in

    viewDidLayoutSubviews() 
    

    Methode. Dadurch wird die UISegmentedControl-Höhe größer, aber das Bild behält seine Höhe bei, wenn UISegmentedControl nicht vergrößert wird. Bei der ersten Interaktion verkleinert sich UISegmentedControl auf die Standardhöhe.

Antwort

4

Vielleicht ist es ein bisschen spät, aber hier meine Unterklasse ist dieses Problem in schnellen 3 zu beheben:

@IBDesignable class MySegmentedControl: UISegmentedControl { 

    @IBInspectable var height: CGFloat = 29 { 
     didSet { 
      let centerSave = center 
      frame = CGRect(x: frame.minX, y: frame.minY, width: frame.width, height: height) 
      center = centerSave 
     } 
    } 

    @IBInspectable var multilinesMode: Bool = false 

    override func layoutSubviews() { 
     super.layoutSubviews() 
     for segment in self.subviews { 
      for subview in segment.subviews { 
       if let segmentLabel = subview as? UILabel { 
        segmentLabel.frame = CGRect(x: 0, y: 0, width: segmentLabel.frame.size.width, height: segmentLabel.frame.size.height * 1.6) 
        if (multilinesMode == true) 
        { 
         segmentLabel.numberOfLines = 0 
        } 
        else 
        { 
         segmentLabel.numberOfLines = 1 
        } 
       } 
      } 
     } 
    } 

} 
1

Probieren Sie unter Code, alle Unter UILabel segmentedControl finden und setzen numberOfLines.

for segmentViews in segmentedControl.subviews { 
    for segmentLabel in segmentViews.subviews { 
     if segmentLabel is UILabel { 
      (segmentLabel as! UILabel).numberOfLines = 0 
     } 
    } 
}