如何在 Swift 中的分段控件中调整 textLabel 的大小?

围兜

在 a 中UIViewController有一个 Segmented Controller 放置在视图的顶部。约束:左:0,右:0,顶:0,高度:90。

每次UIApplicationDidBecomeActive发布通知时,分段控件应通过调用以最新日期更新其视图func updateUI()

在第一次加载时,当viewDidLoad被调用,每个段中的文本按预期显示。
但是,如果应用程序进入后台,当它回到前台时,分段控件的标签不容纳文本并显示 3 个点......之后。请参阅下面的附件和 gif。

范围:每次.UIApplicationDidBecomeActive发布通知时更新每个段的分段控件标题公共 Github 项目https://github.com/bibscy/testProject

 class ViewController: UIViewController {

   var stringDates = [String]()

   var dateNow: Date {
     return Date()
   }
      @IBOutlet weak var segmentedControl: UISegmentedControl!

       func updateUI() {
    //create string dates and set the title of for each segment in segmented control
          self.getNextDays()  
     }

   override func viewDidLoad() {
      super.viewDidLoad()

      NotificationCenter.default.addObserver(self, selector: #selector(updateUI), name: .UIApplicationDidBecomeActive, object: nil)

     UILabel.appearance(whenContainedInInstancesOf: [UISegmentedControl.self]).numberOfLines = 0

      self.getNextDays()
   }
}


  extension ViewController {

//for each segment, construct a string date with the currentDate() being first, followed by 5 consecutive days
func getNextDays()  {

    stringDates.removeAll() //clear any previous data

    for i in 0...5 {
        let dateFormatter = DateFormatter()
        let today = dateNow
        let calendar = Calendar.current

        if i == 0 {
            let dayComponent = Calendar.current.component(.weekday,from: today)
            let day = Calendar.current.component(.day, from: today) //Int
            let dayString = dateFormatter.shortWeekdaySymbols[dayComponent-1] //Symbol


            let month = Calendar.current.component(.month, from: today)
            let monthSymbol = dateFormatter.shortMonthSymbols[month-1]
            let dayMonthString =  dayString + " " + String(day) + " " + monthSymbol
            stringDates.append(dayMonthString)


        } else {
            var components = DateComponents()
            components.weekday = i

            let nextDay = calendar.date(byAdding: components, to: today)
            let nextDayComponent = Calendar.current.component(.weekday,from: nextDay!)
            let day = Calendar.current.component(.day, from: nextDay!)
            let dayString = dateFormatter.shortWeekdaySymbols[nextDayComponent-1] // Symbol


            let month = Calendar.current.component(.month, from: nextDay!)
            let monthSymbol = dateFormatter.shortMonthSymbols[month-1]
            let dayMonthString = dayString + " " + String(day) + " " + monthSymbol
            stringDates.append(dayMonthString)
        }
    }


      //set the title for each segment from stringDates array
       for value in 0...5 {
         self.segmentedControl.setTitle(self.stringDates[value], forSegmentAt: value)
      }
   } //end of getNextDays()  
}

在此处输入图片说明 在此处输入图片说明

肯尼

该问题仅在 10.3 iOS 版本中重现。解决方案:

存储分段标签的初始属性:

fileprivate var height: CGFloat! 
fileprivate var width: CGFloat!

添加到 ViewDidLoad 之前getNextDays

let label = segmentedControl.subviews[0].subviews[0] as! UILabel 
height = label.frame.height 
width = label.frame.width

设置文本:

for value in 0...5 {
   segmentedControl.setTitle(stringDates[value], forSegmentAt: value)
}

然后修复帧:

let labels = segmentedControl.subviews.map{ $0.subviews[1] } as! [UILabel]
    labels.forEach { (label) in
        label.numberOfLines = 0
        let frame = label.frame
        label.frame = CGRect(x: frame.origin.x, y: frame.origin.y, width: width, height: height)
    }

带有一些崩溃保护的示例代码

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类常见问题

如何在Swift中调整图片大小?

来自分类Dev

如何在Swift中根据用户类型调整UITextField的大小

来自分类Dev

如何在Swift中根据用户类型调整UITextField的大小

来自分类Dev

如何在Swift中停止调整横幅广告框的大小

来自分类Dev

如何在CWnd中调整WPF控件的大小?

来自分类Dev

如何在 DevExpress LayoutPanel 中调整 WPF 用户控件的大小

来自分类Dev

如何在Swift中以编程方式调整UIButton中文本的字体大小以适应宽度?

来自分类Dev

如何在Swift中以编程方式调整UIButton中文本的字体大小以适应高度?

来自分类Dev

如何在OS X上的Swift中调整大小,裁剪和导出AVAset?

来自分类Dev

如何在iPhone 4S Swift上的UITextView中动态调整文本大小

来自分类Dev

Swift如何在Story Board中设计UIWebView自动调整全屏大小

来自分类Dev

如何在iPhone 4S Swift上的UITextView中动态调整文本大小

来自分类Dev

如何在UITableView中设置textLabel的Alpha动画?

来自分类Dev

如何限制UITabelViewCell中textLabel的宽度

来自分类Dev

如何在Swift中使用视图调整子图层的大小?

来自分类Dev

如何在Swift中增加或减少按钮的大小?

来自分类Dev

如何在Swift中获取图像文件的大小?

来自分类Dev

如何在Swift中以编程方式更改UICollectionViewCell大小?

来自分类Dev

如何在Swift 2.0中获取正确的UIView大小或范围?

来自分类Dev

如何在iOS中调整UIView的大小?

来自分类Dev

如何在横向中调整UIPageViewController的大小

来自分类Dev

如何在Excel中调整图表大小

来自分类Dev

如何在JTabbedPane中调整JTable的大小

来自分类Dev

如何在Vala中调整窗口大小?

来自分类Dev

如何在Tkinter中调整按钮的大小?

来自分类Dev

如何在ImageDataGenerator中调整图像大小

来自分类Dev

如何在UIWebView中调整图像大小?

来自分类Dev

如何在横向中调整UIPageViewController的大小

来自分类Dev

如何在Vala中调整窗口大小?

Related 相关文章

  1. 1

    如何在Swift中调整图片大小?

  2. 2

    如何在Swift中根据用户类型调整UITextField的大小

  3. 3

    如何在Swift中根据用户类型调整UITextField的大小

  4. 4

    如何在Swift中停止调整横幅广告框的大小

  5. 5

    如何在CWnd中调整WPF控件的大小?

  6. 6

    如何在 DevExpress LayoutPanel 中调整 WPF 用户控件的大小

  7. 7

    如何在Swift中以编程方式调整UIButton中文本的字体大小以适应宽度?

  8. 8

    如何在Swift中以编程方式调整UIButton中文本的字体大小以适应高度?

  9. 9

    如何在OS X上的Swift中调整大小,裁剪和导出AVAset?

  10. 10

    如何在iPhone 4S Swift上的UITextView中动态调整文本大小

  11. 11

    Swift如何在Story Board中设计UIWebView自动调整全屏大小

  12. 12

    如何在iPhone 4S Swift上的UITextView中动态调整文本大小

  13. 13

    如何在UITableView中设置textLabel的Alpha动画?

  14. 14

    如何限制UITabelViewCell中textLabel的宽度

  15. 15

    如何在Swift中使用视图调整子图层的大小?

  16. 16

    如何在Swift中增加或减少按钮的大小?

  17. 17

    如何在Swift中获取图像文件的大小?

  18. 18

    如何在Swift中以编程方式更改UICollectionViewCell大小?

  19. 19

    如何在Swift 2.0中获取正确的UIView大小或范围?

  20. 20

    如何在iOS中调整UIView的大小?

  21. 21

    如何在横向中调整UIPageViewController的大小

  22. 22

    如何在Excel中调整图表大小

  23. 23

    如何在JTabbedPane中调整JTable的大小

  24. 24

    如何在Vala中调整窗口大小?

  25. 25

    如何在Tkinter中调整按钮的大小?

  26. 26

    如何在ImageDataGenerator中调整图像大小

  27. 27

    如何在UIWebView中调整图像大小?

  28. 28

    如何在横向中调整UIPageViewController的大小

  29. 29

    如何在Vala中调整窗口大小?

热门标签

归档