标签: landscape-portrait

键盘出现时调整视图大小(iOS)

我意识到有许多类似的解决方案,例如TPKeyboardAvoiding,Apple着名的解决方案,以及涉及使用UIScrollView的各种建议.在我的情况下,我需要调整视图大小以适应键盘而不是滚动或移动它.这个解决方案最接近我想要达到的目标,所以这是我的基础.但是我在横向模式下工作时遇到了问题.键盘出现时调整视图大小的方法是:

- (void)keyboardWillShow:(NSNotification *)note {
    NSDictionary *userInfo = note.userInfo;
    NSTimeInterval duration = [[userInfo objectForKey:UIKeyboardAnimationDurationUserInfoKey] doubleValue];
    UIViewAnimationCurve curve = [[userInfo objectForKey:UIKeyboardAnimationCurveUserInfoKey] intValue];

    CGRect keyboardFrame = [[self textField].superview convertRect:[[userInfo objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue] fromView:nil];
    CGRect statusBarFrame = [[self textField].superview convertRect:[UIApplication sharedApplication].statusBarFrame fromView:nil];

    CGRect bounds = [self textField].superview.bounds;    
    CGRect newFrame = CGRectMake(0.0, 0.0, bounds.size.width, keyboardFrame.origin.y + statusBarFrame.size.height);
    [UIView animateWithDuration:duration delay:0 options:UIViewAnimationOptionBeginFromCurrentState | curve animations:^{
        [self textField].superview.frame = newFrame;
    } completion:nil];
}
Run Code Online (Sandbox Code Playgroud)

这在肖像模式下完美运行.

在此输入图像描述

但是,在横向模式下,视图会从左到右或从右到左调整大小,具体取决于设备旋转的方向,而不是从下向上.

在此输入图像描述

显然我使用坐标有些不对劲,而且在横向模式下,某些参考框架并不是我认为的那样,但我有一点时间整理出如何解决它.我尝试用-convertRect转换各种各样的东西:但是我正在尝试的任何东西都让我无处可去.

我真的希望有人不会对所有这些矩形感到困惑,以及当方向变化时他们如何改变可以发现我做错了什么以及我需要做些什么才能做到这一点.作为参考,我创建了一个项目,显示了最简单的情况,可以重现我遇到的问题.

iphone keyboard ipad ios landscape-portrait

12
推荐指数
2
解决办法
2万
查看次数

为视图组合layout_weight和maxWidth

我正在尝试使我的布局更加横向友好,我有一个常见的模式是添加LinearLayout一些按钮(例如OK |取消),只需设置一个值,layout_weight以便空间均匀分布.问题是,当您在横向模式下使用手机或(特别是)平板电脑时,最终会出现看起来很荒谬的巨大按钮.我尝试设置maxWidth按钮和线性布局,但无济于事.实现这一目标最简单的方法是什么?即,为视图设置最大水平尺寸,使其不会增长到整个宽度.我尝试了很多不同的东西,但都没有用.

这是一个示例布局:

    <LinearLayout 
      android:layout_width="fill_parent"
      android:layout_height="wrap_content"
      android:gravity="center_horizontal"
      android:paddingLeft="10dp"
      android:paddingRight="10dp"
      android:paddingTop="6dp"
      android:paddingBottom="6dp">
      <Button 
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:enabled="false"
        android:textStyle="bold"
        android:text="@string/button1" />
      <Button 
        android:id="@+id/button2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="@string/button2" />
    </LinearLayout>
Run Code Online (Sandbox Code Playgroud)

注意:我知道我可以为横向创建一个新的布局文件并在那里做魔术.我想将专门的布局文件保持在最低限度,我希望这不需要它们.

css layout android landscape-portrait

11
推荐指数
1
解决办法
6811
查看次数

在风景中呈现模态VC时,父VC中的安全区域更改

当我呈现仅支持横向的SecondViewController时,第一个UIViewController中的安全区域插入会更改为安全区域插图.

GIF描述了bug

GIF描述了触及TabBar和TableView的bug

FirstViewController:

class ViewController: UIViewController {

  @IBAction func showSecondVC(_ sender: Any) {
    let storyboard = UIStoryboard(name: "Main", bundle: nil)
    let controller = storyboard.instantiateViewController(withIdentifier: "SecondViewController")

    self.present(controller, animated: true, completion: {
      print("completed")
    })
  }

  override func viewSafeAreaInsetsDidChange() {
    print(view.safeAreaInsets)
    super.viewSafeAreaInsetsDidChange()
    print(view.safeAreaInsets)
  }
}
Run Code Online (Sandbox Code Playgroud)

第二个ViewController:

class SecondViewController: UIViewController {
  override var supportedInterfaceOrientations: UIInterfaceOrientationMask {
    return [.landscape]
  }

  @IBAction func dismissYourSelff(_ sender: Any) {
    self.dismiss(animated: true, completion: nil)
  }
}
Run Code Online (Sandbox Code Playgroud)

控制台输出:

UIEdgeInsets(top: 44.0, left: 0.0, bottom: 34.0, right: 0.0)
UIEdgeInsets(top: 44.0, left: …
Run Code Online (Sandbox Code Playgroud)

landscape ios landscape-portrait ios11 safearealayoutguide

11
推荐指数
1
解决办法
957
查看次数

ExoPlayer在旋转屏幕上的相同位置恢复

我在我的活动中使用ExoPlayer,我想要的是在纵向和横向模式下顺利播放视频.为此我正在做的是onpause保存currentPlayerPosition并寻找玩家到那个位置onresume但是在旋转它时面对一个混蛋和视频暂停一段时间并播放到保存的位置.

我的代码如下,请帮助我如何顺利切换模式肖像和风景.谢谢

     @Override
public void onPause() {

    super.onPause();

    if (mExoPlayerView != null && mExoPlayerView.getPlayer() != null) {
        mResumeWindow = mExoPlayerView.getPlayer().getCurrentWindowIndex();
        mResumePosition = Math.max(0, mExoPlayerView.getPlayer().getContentPosition());
        mExoPlayerView.getPlayer().release();
    }
}


@Override
public void onDestroy() {
    super.onDestroy();
    if (mExoPlayerView.getPlayer() != null)
        mExoPlayerView.getPlayer().release();
}


  @Override
public void onSaveInstanceState(Bundle outState) {

    outState.putInt(STATE_RESUME_WINDOW, mResumeWindow);
    outState.putLong(STATE_RESUME_POSITION, mResumePosition);
    outState.putBoolean(STATE_PLAYER_FULLSCREEN, mExoPlayerFullscreen);
    super.onSaveInstanceState(outState);
}



   @Override
protected void onResume() {

    super.onResume();

    if (mExoPlayerView == null) {

        mExoPlayerView = (SimpleExoPlayerView) findViewById(R.id.exoplayer);

        videoURL = getIntent().getStringExtra("url");
        postID = getIntent().getIntExtra("UserID", 0);

        String …
Run Code Online (Sandbox Code Playgroud)

video android landscape-portrait android-activity exoplayer

9
推荐指数
1
解决办法
3937
查看次数

android相机纵向方向

我在我的应用程序中使用相机.我只是intent用来启动相机

Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
        cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri);
        startActivityForResult(cameraIntent, 101);
Run Code Online (Sandbox Code Playgroud)

捕获的图像自动进入landscape view.如何camera捕获图像portrait view

android android-camera android-camera-intent landscape-portrait

8
推荐指数
1
解决办法
2万
查看次数

CSS响应式设计 - 检测人像显示

我知道纯CSS可以根据屏幕尺寸调整样式表,如下所示:

@media (max-width: 959px) {
  /* styles for smallest viewport widths */
}

@media (min-width: 600px) and (max-width: 959px) {
  /* styles for mid-tier viewport widths */
}

@media (min-width: 960px) {
  /* original CSS styles */
}
Run Code Online (Sandbox Code Playgroud)

(来源)

是否可以使用纯CSS来检查横向或纵向显示?

css landscape portrait landscape-portrait responsive-design

8
推荐指数
1
解决办法
2万
查看次数

如何在不使用代码的情况下使用约束AutoLayout来指定横向与纵向的不同布局?

我有一个iPad应用程序,它具有登录屏幕,登录控件包含在UIView中.

当iPad处于纵向时,我在应用程序的底部和中心附近有登录UIView,几乎就在键盘的正上方,公司徽标位于以顶部为中心的UIImageView中.我正在使用AutoLayout约束来保持公司徽标被吸引到顶部和右侧,并且Login UIView被吸引到底部和右侧.

http://chattypics.com/files/ipadportrait_0dzalz3ipx.png

当我将其旋转为横向时,效果如下:

http://chattypics.com/files/ipadlandscape1_j15ps5c95u.png

我希望它看起来像这样

http://chattypics.com/files/ipadlandscape2_sobufqkdhg.png

所以,我希望这两个元素并排,我希望Login UIView更加向右.在纵向模式下,UIView右侧的间距量大于我想要的横向模式,并且距离底部的距离小于我想要的横向模式.我可以通过"容器中心"来处理这个问题,但这在横向模式下也不起作用.

在横向模式中,我使用了这篇文章中详细介绍的技术使事情"并排",但我不相信这就足够了,因为我希望"视图"中的布局在旋转时也是不同的.

我可以想办法以编程方式解决这个问题,但是我无法想象这是一个独特的需求,所以是否有某些方法只使用IB中的约束来解决这个问题?有些"这就是IB中的限制因素设计的方式",可能涉及优先事项?或者我只需要在代码中解决这个问题?

ipad ios landscape-portrait autolayout

8
推荐指数
2
解决办法
4712
查看次数

在c#中动态更改水晶报告的纵向/横向方向

如何将c#中水晶报告的方向更改为横向?我正在纵向使用水晶报告.

c# crystal-reports landscape-portrait

7
推荐指数
2
解决办法
2万
查看次数

在纵向和横向之间切换时,Android整数xml资源值不会更改

我使用以下GradientDrawable作为RelativeLayout的背景:

<shape xmlns:android="http://schemas.android.com/apk/res/android" >
    <gradient
        android:angle="@integer/my_value"
        android:endColor="#0FFF"
        android:startColor="#FFFF" />
</shape>
Run Code Online (Sandbox Code Playgroud)

然后在res\values文件夹中创建一个名为integers.xml的文件:

<resources>
    <integer name="my_value">90</integer>
</resources>
Run Code Online (Sandbox Code Playgroud)

另一个在res\values-land文件夹下具有相同名称的文件:

<resources>
    <integer name="my_value">180</integer>
</resources>
Run Code Online (Sandbox Code Playgroud)

因此,当我旋转设备时,梯度从运行Android 2.3.3(如预期)时从底部 - >从上到右 - >左,但是当我在Android 4.4.4上测试时,渐变角度不会改变.

我也尝试过:

<item name="my_value" format="float" type="dimen">90</integer>
Run Code Online (Sandbox Code Playgroud)

但结果相同.

有任何想法吗?

更新:

使用GradientDrawable的RelativeLayout存在于2个不同的文件中:

  1. 水库\布局\ my_layout
  2. 水库\布局,土地\ my_layout

水库\布局,土地\ my_layout

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/my_drawable" >
Run Code Online (Sandbox Code Playgroud)

更新2:

只有在旋转设备时才会出现问题.如果我使用先前旋转的设备启动活动,则正确设置渐变角度.

android landscape-portrait android-resources

7
推荐指数
1
解决办法
672
查看次数

如何制作一个仅限ipad app的肖像?

我正在制作一个ipad应用程序,我将应用程序设置为仅肖像,但它仍然可以在横向上运行?为什么这只发生在ipad上?我该如何解决?

注意:如果答案是代码,请用swift写.

xcode ipad ios landscape-portrait

7
推荐指数
2
解决办法
5229
查看次数