ios中给uiscrollview添加的全屏子视图为啥宽度只显示屏幕的一半

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ios中给uiscrollview添加的全屏子视图为啥宽度只显示屏幕的一半相关的知识,希望对你有一定的参考价值。

参考技术A - (void)viewDidLoad

[superviewDidLoad];

UIScrollView *tempScroll = [[UIScrollViewalloc]initWithFrame:CGRectMake(0,64,320, 200)];
[tempScrollsetBackgroundColor:[UIColor grayColor]];
[tempScroll setContentSize:CGSizeMake(self.view.bounds.size.width,self.view.bounds.size.height)];
[self.view addSubview:tempScroll];

UIButton*tempButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[tempButtonsetBackgroundColor:[UIColor redColor]];
[tempButton setTitle:@"subView A"forState:UIControlStateNormal];
[tempButtonsetFrame:CGRectMake(80,0,80, 100)];

NSLog(@"%d",tempScroll.subviews.count);
[tempScrolladdSubview:tempButton];
本回答被提问者采纳

禁用横向软键盘输入的全屏编辑视图?

【中文标题】禁用横向软键盘输入的全屏编辑视图?【英文标题】:Disabling the fullscreen editing view for soft keyboard input in landscape? 【发布时间】:2011-05-19 05:11:34 【问题描述】:

在使用软键盘的 Android 设备上,我想防止在横向模式下出现全屏键盘编辑视图(如下所示)(即我只想看到软键盘本身和我在它后面的视图)。

我认为这可以使用InputMethodService 上的setExtractViewShown(false) 方法来实现,但我无法访问它的默认实例并且不想实现自定义输入法。

编辑添加:输入的视图不是TextView(它是带有自定义InputConnection 实现的View),所以android:imeOptions="flagNoExtractUi" 不起作用在这里。

【问题讨论】:

让我们试试看。这是对你有好处。 [看这个][1][1]:***.com/questions/8648401/… 我也有类似的问题 :(你可能有什么想法?***.com/questions/36914290/… 如何在整个应用程序中应用它。我们不会在 xml 中的每个编辑文本中添加属性值。 以下许多答案建议使用flagNoExtractUiIME_FLAG_NO_EXTRACT_UI。但是,在对应于flagNoExtractUiIME_FLAG_NO_EXTRACT_UI 的文档中,它声明“不鼓励使用此标志,并且将来可能会弃用它”,因此推荐使用flagNoFullscreen 【参考方案1】:

终于回答了我自己的问题:

可以在连接输入连接时禁用提取 UI(即全屏编辑模式):

@Override
public InputConnection onCreateInputConnection(EditorInfo outAttrs) 

    outAttrs.imeOptions = EditorInfo.IME_FLAG_NO_EXTRACT_UI;

    // etc.

【讨论】:

只需简单地放入你的 xml 文件 android:imeOptions="flagNoExtractUi" jnic,您在软键盘代码中的哪个位置进行了覆盖?软键盘.java?我尝试了相同的覆盖并出错了。 您可能希望将标志添加到选项中,而不是像这样覆盖传入的任何选项:outAttrs.imeOptions |= EditorInfo.IME_FLAG_NO_EXTRACT_UI; @user726518 如何在操作栏中的搜索框项上应用此属性? 使用自定义视图处理键盘时唯一有效的方法。谢谢!【参考方案2】:

为此,导航到活动 xml 并将 android:imeOptions="flagNoExtractUi" 粘贴到您的代码中。但是应该粘贴在哪里呢?查看示例活动 xml 的代码并查看 EditText:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_
    android:layout_
    android:orientation="vertical"         
    >

    <EditText
        android:imeOptions="flagNoExtractUi"

        android:id="@+id/etTextInAct"
        android:layout_
        android:layout_
        android:ems="10" >   
        <requestFocus />
    </EditText>

</LinearLayout>
      

如果您想要更多的键盘自定义选项,请参阅http://developer.android.com/guide/topics/ui/controls/text.html

【讨论】:

仅供参考 EditorInfo.IME_FLAG_NO_EXTRACT_UI 建议改用 IME_FLAG_NO_FULLSCREEN【参考方案3】:

将属性android:imeOptions="flagNoExtractUi" 添加到XML 文件中的每个EditText

【讨论】:

此答案太短,不符合 SO 质量标准。请改进它添加一些额外的解释,以便它对社区有用,而不仅仅是对 OP。 @LorenzoDonati 这正是你必须做的......这是一个非常简单的答案,因为解决方案非常简单,而且它只是一种与上述答案不同的方法。此外,答案不能“太短”,除非他们不回答问题,IMO。 对不起,但这不是 SO 社区的想法。答案不应仅限于解决 OP 的问题,它们通常应该是很好的答案。例如,请参阅 this 和 this。 @LorenzoDonati 这是一个非常的具体问题,只有一个最终结果(但有多种解决方法)。我的答案是对本页其他答案的补充。此页面上的所有答案仅限于“OP 的问题”,因为这是唯一可以写出的答案。就像我说的,它既具体又简单。 终于,我找到了答案。非常感谢@mike yaworski【参考方案4】:

上面的答案帮我弄清楚了动态添加EditTexts的解决方案:

editText.setImeOptions(EditorInfo.IME_FLAG_NO_EXTRACT_UI);

【讨论】:

【参考方案5】:

使用android:imeOptions="flagNoFullscreen" 来实现该功能。

【讨论】:

用 xml 编写更好的方法。为我工作。谢谢 请注意,在IME_FLAG_NO_EXTRACT_UI 的文档中,它对应于flagNoExtractUi,它声明“不鼓励使用此标志,并且将来可能会弃用它”,因此flagNoFullscreen 是推荐选项。【参考方案6】:

另外,如果你想以编程方式组合多个 imeOptions,你可以使用 |语法。

例如,为了禁用横向全屏编辑视图并将键盘中的“下一步”键替换为“确定”(ACTION_DONE),您可以使用:

editText.setImeOptions(EditorInfo.IME_ACTION_DONE | EditorInfo.IME_FLAG_NO_EXTRACT_UI);

【讨论】:

【参考方案7】:

如果您直接修改 IME,您可以通过覆盖 onUpdateExtractingVisibility 来阻止它显示 ExtractedView:

@Override
public void onUpdateExtractingVisibility(EditorInfo ei) 
    ei.imeOptions |= EditorInfo.IME_FLAG_NO_EXTRACT_UI;
    super.onUpdateExtractingVisibility(ei);

【讨论】:

【参考方案8】:

我的解决方案:

android:imeOptions="flagNoExtractUi|flagNoFullscreen"

【讨论】:

这是一个更新的答案。【参考方案9】:

我知道这有点晚了,但对于仍然感兴趣的人来说,这是我的解决方案: 就我而言,我有一个景观 Activity,顶部包含一个 EditText,我需要在此搜索 Activity 中实现自动完成功能,重叠的键盘导致用户无法看到 RecyclerView 的结果。 所以我最终在我的布局中有这个 EditText

<EditText
  android:layout_
  android:layout_
  android:id="@+id/main_search_et"
  android:imeOptions="actionSearch|flagNoExtractUi"
  android:inputType="text"  />

干杯!

【讨论】:

【参考方案10】:

你可以使用:

android:imeOptions="flagNoFullscreen" 

在您的编辑文本中

【讨论】:

这是答案吗? 我试了一下,它对我有用! (我的设备是安卓4.1.2)【参考方案11】:

您可以调用隐藏软键盘并从搜索视图中清除焦点。

public void hideKeyboard(View view) 
    InputMethodManager imm = (InputMethodManager) view.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
    imm.hideSoftInputFromWindow(view.getWindowToken(), 0);


super.clearFocus();

【讨论】:

以上是关于ios中给uiscrollview添加的全屏子视图为啥宽度只显示屏幕的一半的主要内容,如果未能解决你的问题,请参考以下文章

UIScrollview 宽度不能与 iPhone 大小相等

如何在 swift 中设置 UIScrollView 内的全宽图像

调整容器 uiscrollview 中所有 uiscrollview 的大小

iOS 7 自动布局 - UIScrollView 内的 UIImageView

iOS 11 Swift 4 iPhone X Safe Area 支持全屏ScrollView

将uiscrollview子视图调整为全屏