質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

XAML

XAML(Extensible Application Markup Language)はWPF、Silverlight、Windows PhoneそしてWindows Store appsでユーザーインターフェースを定義するために使われるXML言語です。

Xamarin

Xamarin(ザマリン)は、iPhoneなどのiOSやAndroidで動作し、C# 言語を用いてアプリを開発できるクロスプラットフォーム開発環境です。Xamarin Studioと C# 言語を用いて、 iOS と Android の両方の開発を行うことができます。

Q&A

3回答

6644閲覧

Xamarin.FormsのGridでRowDefinition全てのHeightをAutoにしているのにGridに余白ができてしまう

qwerty2501

総合スコア8

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

XAML

XAML(Extensible Application Markup Language)はWPF、Silverlight、Windows PhoneそしてWindows Store appsでユーザーインターフェースを定義するために使われるXML言語です。

Xamarin

Xamarin(ザマリン)は、iPhoneなどのiOSやAndroidで動作し、C# 言語を用いてアプリを開発できるクロスプラットフォーム開発環境です。Xamarin Studioと C# 言語を用いて、 iOS と Android の両方の開発を行うことができます。

0グッド

0クリップ

投稿2017/04/05 07:57

編集2017/04/05 08:07

###前提・実現したいこと
この画像のように、Xamarin.FormsでGridを使用してImageともう一つ何かのViewを縦に並べて余白なく表示したい
イメージ説明

###発生している問題・エラーメッセージ
画像の通り、RowDefinitionのHeightをAutoに設定しても、Grid部分になぜか余白ができてしまいます。
何かプロパティの設定を間違えていますでしょうか。
![イメージ説明

###該当のソースコード
詳細はGitHubをご覧ください

<?xml version="1.0" encoding="utf-8" ?> <ContentPage xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" xmlns:prism="clr-namespace:Prism.Mvvm;assembly=Prism.Forms" prism:ViewModelLocator.AutowireViewModel="True" x:Class="GridImageTest.Views.MainPage" Title="MainPage"> <Grid HorizontalOptions="FillAndExpand" VerticalOptions="Start" BackgroundColor="Red" RowSpacing="0" > <Grid.RowDefinitions> <RowDefinition Height="Auto" /> <RowDefinition Height="Auto" /> </Grid.RowDefinitions> <Image Source="sample_image.png" Grid.Row="0" /> <Label Grid.Row="1" Text="test message" BackgroundColor="Blue" /> </Grid> </ContentPage>

###試したこと
ちなみに、Gridの部分をStackLayoutに変更するとこの現象は発生しませんでした。
暫定的にStackLayoutで対応していますが気になったので質問を上げさせていただきました。

###補足情報(言語/FW/ツール等のバージョンなど)
ビルド環境:Visual Studio 2015
OS:Windows 10
実行環境:Android 7.1.1

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

Gridが自分のサイズを計算する際に、サイズが*(Star)のRow/ColumnDefinitionに配置されているImageをソース画像のピクセル等倍のサイズで認識するようです(今回の例ではColumnDefinitionが省略されて*になっている)。
その結果、Gridのサイズは以下のように決定します。

  • 縦: sample_image.pngの高さ + Labelの高さ
  • 横: ContentPageの幅

このGridサイズを元にImageとLabelのサイズが再計算されます。この時にImageの高さがGridの幅に収まるサイズにスケーリング(縮小)されたものとなるため、ソース画像の高さとの差分だけ余白が残ります。

一応、ColumnDefinitionの幅を明示的にセットすることで回避できますが、他のLayoutを使う方が無難でしょう。

投稿2017/04/17 17:09

編集2017/04/19 01:57
P3PPP

総合スコア359

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

試してないし記憶頼りなので適当なのですが、
ContentPage直下にGrid置いた場合、そのGridのオプション、Startとしても高さ適当になりましたっけ?
自分はそういう時間にGridもう一つ挟んでました。
この辺のなんでそういうサイズになるんだよ!的なのは追っかけるのもやりにくかったりで困りますよね。
あと最近はどうかわかりませんが、前は特にStackLayoutのFillAndExpand、なんか計算おかしくねーかというのがあったので横なので関係なさそうですが、それがimageのサイズ調整に伴い変な計算してる…とか。

投稿2017/06/02 01:43

omanuke

総合スコア109

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

原因は二つあります。

  • GridのVerticalOptionsがStartになっていること(この場合Fillでよいのでは)
  • RowDefinitionのHeightがどちらもAutoになっていること(何れかは"*"あたりにすればよいかと)

手元で動作確認しましたが上の2点の修正で全面塗りつぶされました

投稿2017/04/05 08:13

nuits.jp

総合スコア346

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

qwerty2501

2017/04/05 08:30

説明不足で申し訳ありませんが、想定している挙動としては全面塗りつぶしではありません。 入れ違いになったかもしれませんが、想定している画面の画像を上げさせていただきました。
nuits.jp

2017/04/05 08:42

そういう意味でしたか。早とちりしました。失礼しました。 ImageオブジェクトをLabelに置き換えると想定の動作をすることから、Gridの記述自体は正しく、Imageオブジェクトの高さが正しく伝播していないように思えますが、正確なところは分かりかねます。 力になれず申し訳ありません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問