как удалить внешнюю границу сегментированного элемента управления в xcode? Я установил изображение разделителя на то, что хотел, но теперь, чтобы следить за макетом моего приложения, мне нужно иметь сегментированный элемент управления без внешней границы.Swift: Как удалить границу из сегментированного элемента управления
7
A
ответ
25
Вы можете удалить обе границы и разделители, используя приведенную ниже функцию. Создать расширение 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!
}
}
Вызов выше функции.
segmentedControl.removeBorders()
Ссылка: Remove UISegmentedControl separators completely. (iphone)
Благодаря https://stackoverflow.com/users/3921490/amagain для Swift 3 версии.
9
Вот быстрый ответ Sohil, который может помочь кому-то еще. Это помогло мне. :)
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
Если вы хотите сохранить границы между ячейками
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
}
}
Смежные вопросы
- 1. Сохранение значения переменной из сегментированного элемента управления
- 2. Как получить кнопку для прослушивания сегментированного элемента управления в Swift?
- 3. Изменить значение сегментированного элемента управления?
- 4. Изменение сегментированного фонового изображения управления в Swift
- 5. HMSegmentedControl Закрепление сегментированного элемента управления на свиток в Swift?
- 6. Как вы настраиваете границу UISegmentedControl в swift
- 7. передать переменную в действие сегментированного элемента управления
- 8. Заголовок сегментированного элемента управления не подходит, перекрывается
- 9. Как удалить лишние цвета из угла сегментированного управления?
- 10. вид перезарядка из сегментированного управления
- 11. Выделение активного сегментированного элемента управления + добавление границы вокруг активного сегмента
- 12. Как удалить границу с элемента управления TListBox FireMonkey?
- 13. Как изменить цвет рамки (или удалить границу) элемента управления PropertyGrid?
- 14. Удалить границу из элемента объекта в IE11
- 15. Удалить границу из последнего элемента списка навигации
- 16. Сделать сегмент сегментированного управления невидимым
- 17. Как передать данные в includeerview на основе сегментированного элемента управления
- 18. Давать тень сегментированного управления
- 19. Как удалить границу элемента TextView в ListView
- 20. Как перезагрузить UITableView после изменения сегментированного элемента управления?
- 21. Как завершить отображение текста сегментированного элемента управления в iOS?
- 22. Использование сегментированного управления для управления контроллерами просмотра
- 23. Как удалить угловой наблюдатель из элемента управления?
- 24. Как удалить свойство из пользовательского элемента управления
- 25. Как удалить ControlTemplate из элемента управления
- 26. Как удалить проект из элемента управления Mercurial?
- 27. Как удалить фокус из одного элемента управления?
- 28. Пользовательская ячейка для двух табличных экранов/сегментированного управления Swift
- 29. Как удалить верхнюю границу встроенного элемента SVG
- 30. Как удалить границу элемента hover в nvd3
Спасибо :) Он работал = D Но еще один вопрос, это сделает мое сегментированное управление имеет острый прямоугольный угол, любые способы, чтобы сделать он округлен? – Happiehappie
@Happiehappie нет, вы не можете, пожалуйста, обратитесь к этому ответу http://stackoverflow.com/questions/1834244/uisegmentedcontrol-without-rounded-corner –
Я получаю «фатальную ошибку: неожиданно обнаружен нуль при развертывании необязательного значения» в строке 'setBackgroundImage (imageWithColor (color: backgroundColor!), для: .normal, barMetrics: .default)' – Kakaji