【问题标题】:Change Height of UISegmentedControl改变 UISegmentedControl 的高度
【发布时间】:2014-08-31 05:19:53
【问题描述】:

我正在尝试使用此代码更改 UISegmentedControl 的高度:

CGRect frame= mySegmentedControl.frame;
[mySegmentedControl setFrame:CGRectMake(frame.origin.x, frame.origin.y, frame.size.width, fNewHeight)];

但它不起作用。有谁知道为什么?如果我在界面生成器中取消选中分段控件的“使用自动布局”功能,它实际上可以工作,但是由于某些原因,分段控件中的项目变得不可点击......

这是问题的旁边,我仍然没有找到一种简单的方法来向UISegmentedControl 添加多行文本(这里的任何帮助也将不胜感激)。

【问题讨论】:

  • UISegmentedControl 的高度不应更改,正如您可能从 IB 中看到的那样。如果您想要那种外观和感觉,请创建一个自定义组件。
  • 自定义组件是什么意思,不是 UISegmentedControl?

标签: objective-c ios cocoa-touch


【解决方案1】:

似乎是关于视图周期。

在 iOS 中布局视图实际上涉及 3 个因素 1. 自动布局(iOS6 起可用) 2.设置框架 3. 自动调整蒙版

对于你的情况,

自动布局将帮助计算该 UIView 所需的框架(基于 NSLayouConstraints)然后布局它们。

所以在界面构建器中,如果您启用“自动布局”,界面构建器将为该 UIView 生成 NsLayoutConstraints。 如果您禁用“自动布局”,则构建器正在为您生成 UIView 框架。

假设您必须使用自动布局,您必须在正确的时间调整 UISegmentedControl 的大小

- (void)viewDidLayoutSubview

这是关于视图生命周期的。为了简化它,它就像:

updateConstraints -> 布局(您最好观看相关的 WWDC 会议视频了解详情)

您无法更改框架,因为此流程:

通过代码设置新帧->查看句柄约束和计算(为UISegmentedControl生成另一个帧)->进行布局

很抱歉这个没有组织的回答。

【讨论】:

    【解决方案2】:

    也许这会有所帮助: 我在 Storyboard 视图中有一个自定义大小的 UISegmentedControl。 Storyboard 视图使用 AutoLayout,每次我按下其中一个片段时,UISegmentedControl 都会调整为默认高度,而不是自定义帧大小。

    我的解决方案:

    1)在-(void)viewDidLoad中设置UISegmentedControl框架:

    [mySegControl setFrame:CGRectMake(100, 170, 568, 100)];
    

    2) 在 -(void)viewDidLayoutSubviews 中设置框架:

    [mySegControl setFrame:CGRectMake(100, 170, 568, 100)];
    

    3) 在您用作选择段时的目标的方法中,调用 setNeedsLayout。这将强制 UISegmentedControl 重新布局 IAW 您的自定义帧大小

    [self.view setNeedsLayout];
    

    【讨论】:

    • 我需要的另一个步骤是将 mySegControl.translatesAutoresizingMaskIntoConstraints = true (Swift) 添加到我的 viewDidLoad 函数的开头(否则每次单击分段控件时都会跳转)
    【解决方案3】:

    对我来说,我正在使用这个mySegmentedControl.frame=CGRectMake(236, 178, 171, 35);,它就像一个魅力。

    你检查帧值了吗?

    【讨论】:

      【解决方案4】:

      幸运的是,您也可以从 xib 更改高度。

      您也可以通过xib 这样做。只需在xib 中添加一个段控件。然后在 TextEdit 中打开xib。在那里你会找到代码:

      <segmentedControl opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="left" contentVerticalAlignment="top" segmentControlStyle="plain" selectedSegmentIndex="0" translatesAutoresizingMaskIntoConstraints="NO" id="B99-Tt-vJG">
      
      <rect key="frame" x="222" y="82" width="123" height="44"/>
      

      在这里,您可以将高度从 44 更改为任何所需的高度。您可以像这样更改任何UIConponent 的高度。即使是UIPickerView

      【讨论】:

        【解决方案5】:

        要在 Interface Builder 中执行此操作,您可以在“用户定义的运行时属性”下选择控件并添加框架属性

        【讨论】:

          猜你喜欢
          • 2012-08-15
          • 2011-01-09
          • 2020-01-06
          • 2018-07-06
          • 1970-01-01
          • 1970-01-01
          • 2016-04-02
          • 1970-01-01
          相关资源
          最近更新 更多