在 iOS 8 上自定义 UISegmentedControl

2024-04-06

iOS 7 和 8 似乎使自定义 UISegmentedControl 的旧方法不再完全起作用。我一直像过去一样设置分隔线图像和所有内容,但似乎有一些以前的 iOS 版本中不存在的新状态,因此出现了一些奇怪的视觉效果。

这是我正在使用的代码

// Set divider images
    self.setDividerImage(UIImage(named: "SegmentedControlNoneSelected"), forLeftSegmentState: .Normal, rightSegmentState: .Normal, barMetrics: .Default)
    self.setDividerImage(UIImage(named: "SegmentedControlRightSelected"), forLeftSegmentState: .Normal, rightSegmentState: .Selected, barMetrics: .Default)
    self.setDividerImage(UIImage(named: "SegmentedControlRightSelected"), forLeftSegmentState: .Normal, rightSegmentState: .Highlighted, barMetrics: .Default)
    self.setDividerImage(UIImage(named: "SegmentedControlLeftSelected"), forLeftSegmentState: .Selected, rightSegmentState: .Normal, barMetrics: .Default)
    self.setDividerImage(UIImage(named: "SegmentedControlBothSelected"), forLeftSegmentState: .Selected, rightSegmentState: .Highlighted, barMetrics: .Default)
    self.setDividerImage(UIImage(named: "SegmentedControlBothSelected"), forLeftSegmentState: .Selected, rightSegmentState: .Selected, barMetrics: .Default)
    self.setDividerImage(UIImage(named: "SegmentedControlBothSelected"), forLeftSegmentState: .Highlighted, rightSegmentState: .Selected, barMetrics: .Default)
    self.setDividerImage(UIImage(named: "SegmentedControlBothSelected"), forLeftSegmentState: .Highlighted, rightSegmentState: .Highlighted, barMetrics: .Default)
    self.setDividerImage(UIImage(named: "SegmentedControlLeftSelected"), forLeftSegmentState: .Highlighted, rightSegmentState: .Normal, barMetrics: .Default)


    // Set background images
    var normalBackgroundImage = UIImage(named: "SegmentedControlNormal")
    self.setBackgroundImage(normalBackgroundImage, forState: .Normal, barMetrics: .Default)

    var selectedBackgroundImage = UIImage(named: "SegmentedControlSelected");
    self.setBackgroundImage(selectedBackgroundImage, forState: .Selected, barMetrics: .Default)
    self.setBackgroundImage(selectedBackgroundImage, forState: .Highlighted, barMetrics: .Default)
    self.setBackgroundImage(selectedBackgroundImage, forState: .Disabled, barMetrics: .Default)
    self.setBackgroundImage(selectedBackgroundImage, forState: .Application, barMetrics: .Default)
    self.setBackgroundImage(selectedBackgroundImage, forState: .Reserved, barMetrics: .Default)

有一些现在应该处理的新状态:

//The highlighted button can be still unselected
[self.mySegmentedControl setBackgroundImage:unselectedBackgroundImage
                                   forState:UIControlStateHighlighted
                                 barMetrics:UIBarMetricsDefault];

//The alredy selected button is stil selected when it is highlighted
[self.mySegmentedControl setBackgroundImage:selectedBackgroundImage
                                   forState:UIControlStateHighlighted|UIControlStateSelected
                                 barMetrics:UIBarMetricsDefault];


//Handle when the right segment is highlighted but the left is selected
[self.mySegmentedControl setDividerImage:leftSelectedImage
                       forLeftSegmentState:UIControlStateSelected
                       rightSegmentState:UIControlStateHighlighted
                              barMetrics:UIBarMetricsDefault];

//Handle when the right segment is already selected and just highlighted and the right is normal
[self.mySegmentedControl setDividerImage:leftSelectedImage
                     forLeftSegmentState:UIControlStateHighlighted|UIControlStateSelected
                       rightSegmentState:UIControlStateNormal
                              barMetrics:UIBarMetricsDefault];

//Handle when the left segment is highlighted but the right is selected    
[self.mySegmentedControl setDividerImage:rightSelectedImage
                     forLeftSegmentState:UIControlStateHighlighted
                       rightSegmentState:UIControlStateSelected
                              barMetrics:UIBarMetricsDefault];

//Handle when the left segment is already selected and just highlighted and the left is normal
[self.mySegmentedControl setDividerImage:rightSelectedImage
                     forLeftSegmentState:UIControlStateNormal
                       rightSegmentState:UIControlStateHighlighted|UIControlStateSelected
                              barMetrics:UIBarMetricsDefault];

看起来,分隔线图像宽度现在很重要。它对内容标签的宽度和位置有影响。因此分隔线图像应尽可能缩小。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 iOS 8 上自定义 UISegmentedControl 的相关文章

  • 进入前台后刷新数据

    更改默认设置后 我想在AppDelegate中进入前台时刷新myViewController的数据 我所做的是 AppDelegate m void applicationDidFinishLaunching UIApplication a
  • iphone NSDate 转换问题

    在我的 facebook 图表 Api 中 我正在获取这些数据 来自杰森 updated time 2011 05 17T14 52 16 0000 我正在使用此代码将其转换为有效的日期格式 NSDateFormatter df NSDat
  • Xcode 中的 iOS 9 警告 - 此文件设置为针对早于项目部署的版本进行构建。功能可能有限

    我刚刚将我的 Mac 更新到最新的操作系统 并将 Xcode 更新到最新版本 现在我收到此警告 但我不知道该由谁来删除它 也不知道它的真正含义是什么 有人可以向我解释一下吗 Thanks Select Main storyboard in
  • 检测 AvPlayer 何时切换比特率

    在我的应用程序中 我使用 AVPlayer 通过 HLS 协议读取一些流 m3u8 文件 我需要知道在流会话期间 客户端切换比特率多少次 我们假设客户端的带宽正在增加 因此客户端将切换到更高比特率的段 AVPlayer能检测到这个开关吗 T
  • 我的游戏中应该有多少个视图控制器?

    我开始使用 spritekit 构建我的第一个游戏 现在我只有一个视图控制器来呈现开始屏幕场景 override func viewDidLoad super viewDidLoad let scene StartScreenScene C
  • 防止 AlertView 被解雇

    任何人都可以帮助我防止在其按钮单击事件上解雇警报视图吗 我有一个 textview 作为我的alertView 的子视图 如果 textview 值为 nil 我不想关闭它 因为这是一个非常老的问题 但我得到了一个解决方案 并且如果其他开发
  • iOS 循环对象的属性并添加操作

    我有一个具有几个类似属性的类 UISliders 我想添加用户开始和结束使用每个滑块时的操作 每个滑块都将链接到同一个选择器 因此我考虑只是迭代它们 而不是编写 10 个几乎相同的代码块 问题是 最有效的方法是什么 我尝试过这样的事情 在运
  • Google 地图 API -> OpenGLES 崩溃

    日志是从 Crashlytics 粘贴的 对于许多用户来说 崩溃经常发生 据我所知 它与设备 iOS 版本无关 我在我的代码中找不到任何错误 这似乎是纯粹的库问题 是 Google 地图 API 错误吗 我可以做些什么来修复它 或者我应该在
  • git 提交错误:检测到大文件

    您好 我正在为 ios 8 1 开发一个应用程序 xcode 我已经使用 googleMaps 框架来实现自动完成功能 当我尝试在 Git 中推送我的项目时 我收到大文件检测错误 后来尝试使用 git lfs 并跟踪 git 检测到的文件
  • 苹果企业程序分发问题[关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 这个问题涉及到Apple iOS 开发者企业计划 http developer apple com programs ios enterprise 我
  • UIWebView Bug:-[UIWebView cut:]:无法识别的选择器发送到实例

    In the UIWebView 如果包含文本的输入元素具有焦点 并且按下按钮导致输入失去焦点 则随后双击输入以重新获得焦点并从出现的弹出栏中选择 剪切 或 复制 或 粘贴 会导致这UIWebView因错误而崩溃 UIWebView cut
  • 苹果推送通知在生产中不起作用

    我们完全陷入困境 请帮忙 我和我的团队制作了一个 iPhone 应用程序 这是我们第一次在 iOS 上尝试 一切都很好 直到我们提交应用程序并在应用程序商店上可用为止 推送通知服务无法正常工作 我在网上搜索并尝试根据人们的建议仔细检查我们的
  • 我可以更改键盘方向吗?

    例如我用这段代码关闭自动旋转 BOOL shouldAutorotateToInterfaceOrientation UIInterfaceOrientation interfaceOrientation return NO BOOL sh
  • 具有自动布局的 UITableViewCell 中的 UILabel 高度错误

    我有一个UITableView单元格的固定高度为 100 点 这些单元格是在 xib 文件中创建的 该文件使用 3 个约束来固定UILabel到单元格的左 右和上边缘contentView 标签的垂直拥抱优先级设置为 1000 因为我希望单
  • 如何自动缩放mapView以显示叠加层

    我可以在 mapView 上绘制多边形 但是我需要找到多边形并手动缩放它 有没有办法自动执行此过程 例如调整中心多边形 我浏览过互联网并阅读了一些相关文章 其中大多数都是基于折线和点的 任何形式的帮助将不胜感激 因为我正在寻找解决方案一段时
  • 无法将“SDWebImageActivityIndi​​cator”类型的值分配给“ST_SDWebImageIndicator”类型?

    I have multiple flavours targets in my Xcode project I am also using SDWebImage in my app Everything was working fine un
  • -[EAGLContext renderbufferStorage:fromDrawable:] 第二次失败?

    我正在开发一个 iOS openGL ES 应用程序 我正在做通常的 EAGLView ES2Render 的事情 启动时 使用以下代码成功创建 frambuffer BOOL createFramebuffers EAGLContext
  • iOS - NSNotificationCenter 多个UIKeyboard通知

    我有两个视图控制器 我们称它们为 A 和 B 1 在 A 中 我显示一个包含文本字段的 popOver 2 B中有一个UITextView用于简单的文本编辑 我必须管理 A 和 B 中的键盘才能滚动键盘隐藏的内容 我知道如何重新定位内容 我
  • iOS Storyboards 我应该使用它们吗? [复制]

    这个问题在这里已经有答案了 我是 iOS 开发新手 尚未创建应用程序 但我向我的朋友寻求建议 他在市场上拥有非常高评价的应用程序 他说不要使用故事板 尽管我很想听取他的建议 但它们似乎确实很有帮助 这是否会在将来给我的应用程序带来问题 我有
  • 是什么导致了这个 iPhone 崩溃日志?

    我有点卡住了 需要解决这个问题 因为我的一个应用程序出现了随机崩溃 而这些崩溃并不总是能够重现 这是崩溃日志之一 Incident Identifier 59865612 9F00 44EA 9474 2BF607AD662E CrashR

随机推荐

  • 即使我做了所有事情,Req.body 在快递中还是空的

    大家好 我搜索了很多相关内容并尝试了所有方法 但我仍然在帖子中得到空的身体 表单发送的正文正确 我只是用 fiddler 进行测试 节点 Express 没有得到它 这是代码 这是我的表格
  • Xcode 10:找不到此可执行文件的有效配置文件

    从昨天开始 当我尝试在我的设备上运行应用程序时 出现以下错误 找不到此可执行文件的有效配置文件 这是更新到 Xcode 10 后的情况 上周使用 Xcode 9 构建没有出现任何问题 我检查了有关该错误的其他讨论 但没有一个解决方案有效 这
  • Loop_apply.o:文件无法识别:文件格式无法识别

    我正在尝试安装R s plyr包裹 这是错误消息 installing source package plyr package plyr successfully unpacked and MD5 sums checked libs cla
  • Fluent NHibernate 映射可空枚举

    我需要在我的类中映射一个可为空的枚举 但出现异常 NHibernate PropertyAccessException 无效的转换 检查您的映射是否属性类型不匹配 App Model Stock 的 setter gt System Inv
  • 为什么 C# 运算符重载必须是静态的?

    为什么 C 要求运算符重载是静态方法而不是成员函数 如 C 也许更具体地说 这个决定的设计动机是什么 埃里克 利珀特 Eric Lippert 在一篇文章中对此进行了极其详细的回答 博客文章 https ericlippert com 20
  • 使用 ostream 进行 C++ 日志记录

    我正在制作一个记录器 我想创建一个函数log 以流作为输入 例如 log hello lt lt lt lt world lt lt 10 lt lt n 我也希望它是线程安全的 我重新定义了 lt lt 运算符所以我可以这样做 log l
  • 为什么Python有格式化函数和格式化方法

    The format http docs python org 2 library functions html format内置函数中的函数似乎是str format http docs python org 2 library stdt
  • PostgreSQL 9.5 - 将 NULL 与 JSON 合并时更新不起作用

    My users表包含一个metadata类型列json 现在 我想向用户添加新的元数据 同时保留现有值 所以我正在使用 合并 2 个 JSON 对象的运算符 UPDATE users SET metadata metadata jsonb
  • 使用重定向/重写规则获取漂亮的浏览器 URL 时出现问题

    目前我使用 htaccess 重定向来发送 不错的 网址 办公室 伦敦 随便到我的脚本 讨厌的网址 db db pl 伦敦办事处 无论什么 我希望浏览器 url 很好 但使用 301 重定向则不然 所以我尝试使用 RewriteRule 但
  • 将数据框列中的列表拆分为多列[重复]

    这个问题在这里已经有答案了 我有一个 Pandas DataFrame 列 列表中包含多个列表 像这样的东西 df col1 0 1 2 2 3 1 a b 4 5 x y 2 6 7 我想将列表拆分为多列 因此输出应该类似于 col1 c
  • DataFrame.index.levels 在削减数据帧后显示“额外”值

    假设我有一个大数据框large行上有一个 MultiIndex 我通过仅选择某些行来缩减此数据框并将结果分配给small 尤其 small行上 MultiIndex 的第 0 级中的不同值少于large 然后我想要一个 MultiIndex
  • 如何轻松检测字符串中的utf8编码?

    我有一个由其他程序的数据填充的字符串 该数据可以使用 UTF8 编码 也可以不使用 因此 如果不是 我可以编码为 UTF8 但是在 C 中检测 UTF8 的最佳方法是什么 我看到了这个变体https stackoverflow com qu
  • Puppeteer pdf 分页错误

    我尝试用 puppetter 生成 pdf 文件 它适用于一页 但当我尝试生成多页 pdf 文档时 我遇到了分页错误 下面使用 HTML 模板来生成 如果可以 请你帮助我 复制的前提条件 将第一页填充到 100 高度并为下面的块添加标题 H
  • 为什么当我运行应用程序时会创建这么多“postgres.exe”?

    我有一个 J2EE 应用程序 部署在 JBoss 应用程序服务器中Windows Vista 32 位 平台 我的数据库是 PostgreSQL 9 0 4 并且我正在使用 JDBC 驱动程序 postgresql 9 0 801 jdbc
  • 快速发布请求编码加号变成空格

    最近我发现当我发送包含 号的帖子数据时 会变成空格 例如 菜肴名称 鱼 薯条 这会导致服务器端无法读取数据 所以我尝试以下 我使用 request setValue application json charset utf 8 forHTT
  • cocos2d中捏合时如何缩放精灵?

    我正在开发一个应用程序 我必须显示 50 到 70 个图像 精灵 我制作了一个滚动条 可以滚动所有这些图像 但我也想缩放这些图像 我一直在关注 http ganbarugagames com 2010 12 detecting touch
  • 如何在函数内部调用函数本身

    我有一个函数 我想在最后一行完成后再次调用它 如果我展示代码也许会更容易理解 function updateQuantity further code where I change same data and now I want to s
  • 网格列不起作用? [复制]

    这个问题在这里已经有答案了 我有这个标记
  • 未捕获的类型错误:$(...).fullCalendar 不是函数(...)

    document ready function page is now ready initialize the calendar calendar fullCalendar put your options and callbacks h
  • 在 iOS 8 上自定义 UISegmentedControl

    iOS 7 和 8 似乎使自定义 UISegmentedControl 的旧方法不再完全起作用 我一直像过去一样设置分隔线图像和所有内容 但似乎有一些以前的 iOS 版本中不存在的新状态 因此出现了一些奇怪的视觉效果 这是我正在使用的代码