IOS UISegmentedControl 不在 ios 10 中显示

标签 ios swift xcode uisegmentedcontrol

我是 IOS 的初学者。我正在开发 Swift 应用程序并且我正在使用 UISegmentedControl。它在 ios 11 中显示良好,但当我在 IOS 10 设备上运行我的应用程序时,分段控件未显示。有谁知道为什么?

分段控件只有IOS 11才有吗?

这是我的应用程序的屏幕截图(抱歉,我还不能发布图片):

iOS 11

IOS 11 Version

iOS10

IOS10 Version

这是我的 SegmentedViewController.swift :

import UIKit
import MMDrawerController

class SegmentedViewController: UIViewController {

@IBOutlet weak var viewContainer: UIView!

var segmentedController: UISegmentedControl!
var floorRequest:Int = 0
var segmentedControlIndex:Int = 0

lazy var travelViewController: TravelViewController = {
    var viewController = self.initTravelViewController()

    return viewController
}()

lazy var nearbyViewController: NearbyTableViewController = {
    let storyboard = UIStoryboard(name: "Main", bundle: Bundle.main)

    var viewController = storyboard.instantiateViewController(withIdentifier: "NearbyTableViewController") as! NearbyTableViewController

    self.addViewControllerAsChildViewController(childViewController: viewController)

    return viewController
}()

var views: [UIView]!

let appDelegate:AppDelegate = UIApplication.shared.delegate as! AppDelegate


func initTravelViewController() -> TravelViewController {
    let storyboard = UIStoryboard(name: "Main", bundle: Bundle.main)

    let viewController = storyboard.instantiateViewController(withIdentifier: "TravelViewController") as! TravelViewController

    viewController.floorRequest = floorRequest

    self.addViewControllerAsChildViewController(childViewController: viewController)

    return viewController
}


override func viewDidLoad() {
    super.viewDidLoad()

    segmentedController = UISegmentedControl()
    navigationItem.titleView = segmentedController

    self.title = "TAB_BAR_MAP".localized()

}

override func viewWillAppear(_ animated: Bool) {
    self.tabBarController?.navigationItem.title = "MENU_SECTION_TRAVEL".localized().uppercased()

    // Navigation Bar
    self.navigationController?.navigationBar.titleTextAttributes = [NSForegroundColorAttributeName : UIColor.white, NSFontAttributeName: UIFont(name: "Lato-Bold", size: 18)!]
    self.navigationController?.navigationBar.tintColor = .white
    self.navigationController?.navigationBar.barTintColor = appDelegate.colorAqaDark
    self.navigationController?.navigationBar.isTranslucent = false
    self.navigationItem.backBarButtonItem = UIBarButtonItem(title: "", style: .plain, target: nil, action: nil)

    if (self.navigationController?.viewControllers.count)! < 2 {
        let buttonLeft: UIButton = appDelegate.aqaBarButton(image: #imageLiteral(resourceName: "IconWhiteMenu"))
        buttonLeft.addTarget(self, action: #selector(toggleMenu), for: .touchUpInside)
        buttonLeft.frame = CGRect.init(x: 0, y: 0, width: 25, height: 25)
        let buttonMenu = UIBarButtonItem(customView: buttonLeft)
        self.navigationItem.setLeftBarButton(buttonMenu, animated: false);
    }

    setupView()
    super.viewWillAppear(animated)
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

func toggleMenu() {
    appDelegate.mainContainer!.toggle(MMDrawerSide.left, animated: true, completion: nil)
}

private func setupView(){
    setupSegmentedControl()

    updateView()
}

private func updateView(){
    travelViewController.view.isHidden = !(segmentedController.selectedSegmentIndex == 0)
    nearbyViewController.view.isHidden = (segmentedController.selectedSegmentIndex == 0)
    segmentedControlIndex = segmentedController.selectedSegmentIndex
}

private func setupSegmentedControl(){

    segmentedController.removeAllSegments()
    segmentedController.insertSegment(withTitle: "TAB_BAR_MAP".localized(), at: 0, animated: false)
    segmentedController.insertSegment(withTitle: "TAB_BAR_NEARBY".localized(), at: 1, animated: false)
    segmentedController.addTarget(self, action: #selector(selectionDidChange(sender:)), for: .valueChanged)

    segmentedController.selectedSegmentIndex = segmentedControlIndex
}

func selectionDidChange(sender: UISegmentedControl){
    updateView()
}

private func addViewControllerAsChildViewController(childViewController: UIViewController){
    addChildViewController(childViewController)
    view.addSubview(childViewController.view)

    childViewController.view.frame = view.bounds
    childViewController.view.autoresizingMask = [.flexibleWidth, .flexibleHeight]

    childViewController.didMove(toParentViewController: self)
}
}

最佳答案

问题是您没有给分段控件任何大小。在 iOS 11 中,标题 View 由自动布局在内部调整大小,但在 iOS 10 或更早版本中不是。所以你最终得到一个零大小的分段控件。

关于IOS UISegmentedControl 不在 ios 10 中显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49408394/

相关文章:

ios - AFNetworking 一次可以上传多少张图片

ios - 应用程序暂停时主导航栏消失

swift - CallKit CallDirectory 扩展中的错误

objective-c - 为什么基于自动布局的 NSWindow 在缩放后重绘不正确?

ios - Xcode 7.3 中的自动布局 (swift 2)

ios - UISlider thumbTintColor 在 iOS 7 上没有改变(在 iOS 6 上很好)

ios - 在状态之间向 UIButton 添加动画

ios - 整个图像的特定帧中的边缘检测

ios - 我似乎无法让我的 KeyboardWillShow 工作?

ios - iOS 中导航栏布局的项目太多