come rimuovere il bordo esterno di un controllo segmentato in xcode? Ho impostato l'immagine del divisore su quello che volevo ma ora per seguire la simulazione della mia app ho bisogno di avere un controllo segmentato senza il bordo esterno.Swift: Come rimuovere il bordo dal controllo segmentato
7
A
risposta
25
È possibile rimuovere sia i bordi che i divisori utilizzando la funzione seguente. Creare estensione UISegmentedControl:
For Swift 2.2:
extension UISegmentedControl {
func removeBorders() {
setBackgroundImage(imageWithColor(backgroundColor!), forState: .Normal, barMetrics: .Default)
setBackgroundImage(imageWithColor(tintColor!), forState: .Selected, barMetrics: .Default)
setDividerImage(imageWithColor(UIColor.clearColor()), forLeftSegmentState: .Normal, rightSegmentState: .Normal, barMetrics: .Default)
}
// create a 1x1 image with this color
private func imageWithColor(color: UIColor) -> UIImage {
let rect = CGRectMake(0.0, 0.0, 1.0, 1.0)
UIGraphicsBeginImageContext(rect.size)
let context = UIGraphicsGetCurrentContext()
CGContextSetFillColorWithColor(context, color.CGColor);
CGContextFillRect(context, rect);
let image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return image
}
}
For Swift 3:
extension UISegmentedControl {
func removeBorders() {
setBackgroundImage(imageWithColor(color: backgroundColor!), for: .normal, barMetrics: .default)
setBackgroundImage(imageWithColor(color: tintColor!), for: .selected, barMetrics: .default)
setDividerImage(imageWithColor(color: UIColor.clear), forLeftSegmentState: .normal, rightSegmentState: .normal, barMetrics: .default)
}
// create a 1x1 image with this color
private func imageWithColor(color: UIColor) -> UIImage {
let rect = CGRect(x: 0.0, y: 0.0, width: 1.0, height: 1.0)
UIGraphicsBeginImageContext(rect.size)
let context = UIGraphicsGetCurrentContext()
context!.setFillColor(color.cgColor);
context!.fill(rect);
let image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return image!
}
}
Chiamare la funzione di cui sopra.
segmentedControl.removeBorders()
Riferimento: Remove UISegmentedControl separators completely. (iphone)
Grazie a https://stackoverflow.com/users/3921490/amagain per Swift 3 versione.
9
Ecco la versione 3 rapida della risposta di Sohil che potrebbe aiutare qualcun altro. Mi ha aiutato. :)
extension UISegmentedControl {
func removeBorders() {
setBackgroundImage(imageWithColor(color: backgroundColor!), for: .normal, barMetrics: .default)
setBackgroundImage(imageWithColor(color: tintColor!), for: .selected, barMetrics: .default)
setDividerImage(imageWithColor(color: UIColor.clear), forLeftSegmentState: .normal, rightSegmentState: .normal, barMetrics: .default)
}
// create a 1x1 image with this color
private func imageWithColor(color: UIColor) -> UIImage {
let rect = CGRect(x: 0.0, y: 0.0, width: 1.0, height: 1.0)
UIGraphicsBeginImageContext(rect.size)
let context = UIGraphicsGetCurrentContext()
context!.setFillColor(color.cgColor);
context!.fill(rect);
let image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return image!
}
}
1
Se si desidera salvare i confini tra le cellule
extension UISegmentedControl {
func removeBorders() {
if let backgroundColor = backgroundColor, let backgroundImage = UIImage.imageWithSize(size: CGSize.one_one, color: backgroundColor){
setBackgroundImage(backgroundImage, for: .normal, barMetrics: .default)
}
if let tintColor = tintColor, let tintImage = UIImage.imageWithSize(size: CGSize.one_one, color: tintColor){
setBackgroundImage(tintImage, for: .selected, barMetrics: .default)
setDividerImage(tintImage, forLeftSegmentState: .normal, rightSegmentState: .normal, barMetrics: .default)
}
}
}
extension CGSize{
static var one_one: CGSize{
return CGSize(width: 1.0, height: 1.0)
}
}
extension UIImage{
static func imageWithSize(size : CGSize, color : UIColor = UIColor.white) -> UIImage? {
var image:UIImage? = nil
UIGraphicsBeginImageContext(size)
if let context = UIGraphicsGetCurrentContext() {
context.setFillColor(color.cgColor)
context.addRect(CGRect(origin: CGPoint.zero, size: size));
context.drawPath(using: .fill)
image = UIGraphicsGetImageFromCurrentImageContext();
}
UIGraphicsEndImageContext()
return image
}
}
Problemi correlati
- 1. Swift: controllo segmentato con un movimento rapido tra le viste
- 2. Controllo segmentato dell'interfaccia utente personalizzata
- 3. Personalizza colore per segmentato selezionato in controllo segmentato
- 4. Come rimuovere il bordo bianco dal grafico a torta HighCharts?
- 5. Come modificare il colore del bordo (o rimuovere il bordo) di un controllo PropertyGrid?
- 6. Rimozione del bordo dal controllo WebBrowser
- 7. Rimuovere il bordo dai pulsanti
- 8. Come rimuovere il bordo dietro il pulsante?
- 9. Modifica del controller della vista quando il controllo Segmentato cambia
- 10. Stato selezionato del testo in un controllo segmentato in Xcode
- 11. Controllo segmentato all'interno della vista di scorrimento
- 12. Azione maniglia rapida sul controllo segmentato
- 13. Come rimuovere il bordo rosso in phpStorm?
- 14. Swing JTextField come rimuovere il bordo?
- 15. Chrome: rimuovere il bordo della finestra/decorazione
- 16. bordo tratteggiato UIImageView swift
- 17. Come rimuovere il bordo di selezione su un ListViewItem
- 18. Come rimuovere il bordo solo da un lato dell'elemento?
- 19. Come rimuovere/eliminare progetti cancellati dal controllo sorgente TFS
- 20. Tag Hr in IE - rimuovere il bordo
- 21. Rimuovere il bordo dove intersecano due divisioni
- 22. CSS rimuovere il bordo blu predefinito
- 23. Come rimuovere il bordo 3d (incassato) dal componente MDIClient nel formato padre MDI?
- 24. Come posso rimuovere il bordo sfocato aggiunto dal browser sugli elementi del modulo focalizzati?
- 25. Come rimuovere il bordo dalla casella di testo in WPF?
- 26. aggiungendo segmentato di controllo con la barra di navigazione
- 27. LeafletJS: come rimuovere il controllo zoom
- 28. Come visualizzare solo il bordo inferiore di UITextField in Swift
- 29. Come rimuovere JFrame Border per lasciare un'immagine Tocca il bordo
- 30. Come rimuovere il bordo attorno all'immagine in css?
Thanks :) Ha funzionato = D Ma ancora una domanda, questo renderà il mio controllo segmentato hanno un angolo di forma rettangolare acuto, eventuali modi per rendere arrotondato? – Happiehappie
@Happiehappie no non puoi, per favore fai riferimento a questa risposta http://stackoverflow.com/questions/1834244/uisegmentedcontrol-without-rounded-corner –
Sto ottenendo l'errore fatale: inaspettatamente trovato nil mentre scartando un valore Optional' on line 'setBackgroundImage (imageWithColor (color: backgroundColor!), per: .normal, barMetrics: .default)' – Kakaji