IOS UISegmentedControl不';不在ios 10中显示
我是IOS的初学者。我正在开发一个Swift应用程序,我正在使用UISegmentedControl。它在ios 11中显示良好,但当我在ios 10设备上运行我的应用程序时,分段控件不会显示。有人知道为什么吗 分段控件是否仅在IOS 11中可用 以下是我的应用程序截图(抱歉,我还不能发布图片): IOS 11 损失10 这是我的SegmentedViewController.swift:IOS UISegmentedControl不';不在ios 10中显示,ios,swift,xcode,uisegmentedcontrol,Ios,Swift,Xcode,Uisegmentedcontrol,我是IOS的初学者。我正在开发一个Swift应用程序,我正在使用UISegmentedControl。它在ios 11中显示良好,但当我在ios 10设备上运行我的应用程序时,分段控件不会显示。有人知道为什么吗 分段控件是否仅在IOS 11中可用 以下是我的应用程序截图(抱歉,我还不能发布图片): IOS 11 损失10 这是我的SegmentedViewController.swift: import UIKit import MMDrawerController class Segme
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)
}
}
导入UIKit
导入MMDrawerController
类SegmentedViewController:UIViewController{
@ibvar-viewContainer:UIView!
var分段控制器:UISegmentedControl!
var floorRequest:Int=0
var分段控制索引:Int=0
lazy var travelViewController:travelViewController={
var viewController=self.initTravelViewController()
返回视图控制器
}()
惰性变量nearbyViewController:NearbyTableViewController={
让故事板=UIStoryboard(名称:“Main”,bundle:bundle.Main)
var viewController=storyboard.instanceeviewcontroller(标识符为:“NearbyTableViewController”)作为!NearbyTableViewController
self.addViewControllerAsChildViewController(childViewController:viewController)
返回视图控制器
}()
变量视图:[UIView]!
让appDelegate:appDelegate=UIApplication.shared.delegate作为!appDelegate
func initTravelViewController()->TravelViewController{
让故事板=UIStoryboard(名称:“Main”,bundle:bundle.Main)
让viewController=storyboard.InstanceEviewController(标识符为:“TravelViewController”)作为!TravelViewController
viewController.floorRequest=floorRequest
self.addViewControllerAsChildViewController(childViewController:viewController)
返回视图控制器
}
重写func viewDidLoad(){
super.viewDidLoad()
segmentedController=UISegmentedControl()
navigationItem.titleView=分段控制器
self.title=“TAB\u BAR\u MAP”。本地化()
}
覆盖函数视图将出现(uo动画:Bool){
self.tabBarController?.navigationItem.title=“MENU\u SECTION\u TRAVEL”.localized().大写()
//导航栏
self.navigationController?.navigationBar.titleTextAttributes=[NSForegroundColorAttributeName:UIColor.white,NSFontAttributeName:UIFont(名称:“Lato Bold”,大小:18)!]
self.navigationController?.navigationBar.tintColor=.white
self.navigationController?.navigationBar.barTintColor=appDelegate.colorAqaDark
self.navigationController?.navigationBar.isTranslucent=false
self.navigationItem.BackBarButtonim=UIBarButtonim(标题:,样式:。普通,目标:nil,操作:nil)
if(self.navigationController?.viewControllers.count)!<2{
let buttonLeft:UIButton=appDelegate.aqaBarButton(图像:#imageLiteral(资源名称:“IconWhiteMenu”))
buttonLeft.addTarget(self,action:#选择器(切换菜单),用于:。touchUpInside)
buttonLeft.frame=CGRect.init(x:0,y:0,宽度:25,高度:25)
let buttonMenu=UIBarButtonItem(自定义视图:buttonLeft)
self.navigationItem.setLeftBarButton(按钮菜单,动画:false);
}
setupView()
超级。视图将显示(动画)
}
重写函数didReceiveMemoryWarning(){
超级。我收到了记忆警告()
//处置所有可以重新创建的资源。
}
功能切换菜单(){
appDelegate.mainContainer!.toggle(MMDrawerSide.left,动画:true,完成:nil)
}
私有函数设置视图(){
setupSegmentedControl()
updateView()
}
私有函数更新视图(){
travelViewController.view.isHidden=!(segmentedController.selectedSegmentIndex==0)
nearbyViewController.view.isHidden=(segmentedController.selectedSegmentIndex==0)
segmentedControlIndex=segmentedController.selectedSegmentIndex
}
专用函数setupSegmentedControl(){
segmentedController.removeAllSegments()
segmentedController.insertSegment(标题为:“TAB\u BAR\u MAP.”本地化(),位置:0,动画:false)
segmentedController.insertSegment(标题为:“TAB\u BAR\u Nearly.”本地化(),位置:1,动画:false)
segmentedController.addTarget(self,action:#选择器(selectionDidChange(sender:)),for:.valueChanged)
segmentedController.selectedSegmentIndex=segmentedControlIndex
}
func selectionDidChange(发送方:UISegmentedControl){
updateView()
}
专用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中,标题视图是通过自动布局在内部调整大小的,但在iOS 10或之前的版本中不是这样。因此,您将得到一个零大小的分段控件 您没有给分段控件任何大小。非常感谢。它起作用了。我不知道你必须设置它的大小。在ios 11中,它不需要设置就可以工作。在ios 11中,它的大小由自动布局决定。但不是以前。好吧,我现在明白了。在IOS开发方面,我还有很多东西要学。非常感谢你真的救了我一天。