Bug 24334 - Custom renderer internal crash on SizeThatFits call
Summary: Custom renderer internal crash on SizeThatFits call
Alias: None
Product: Forms
Classification: Xamarin
Component: Forms ()
Version: 1.3.0
Hardware: Macintosh Mac OS
: Normal normal
Target Milestone: ---
Assignee: Bugzilla
Depends on:
Reported: 2014-11-07 07:42 UTC by Max
Modified: 2015-01-12 17:44 UTC (History)
4 users (show)

Is this bug a regression?: ---
Last known good build:

Project with the bug (23.74 KB, application/zip)
2014-11-07 07:42 UTC, Max

Notice (2018-05-24): bugzilla.xamarin.com is now in read-only mode.

Please join us on Visual Studio Developer Community and in the Xamarin and Mono organizations on GitHub to continue tracking issues. Bugzilla will remain available for reference in read-only mode. We will continue to work on open Bugzilla bugs, copy them to the new locations as needed for follow-up, and add the new items under Related Links.

Our sincere thanks to everyone who has contributed on this bug tracker over the years. Thanks also for your understanding as we make these adjustments and improvements for the future.

Please create a new report on Developer Community or GitHub with your current version information, steps to reproduce, and relevant error messages or log files if you are hitting an issue that looks similar to this resolved bug and you do not yet see a matching new report.

Related Links:

Description Max 2014-11-07 07:42:04 UTC
Created attachment 8653 [details]
Project with the bug

Forms View with registered custom renderer crashes then placed inside any layout. This caused by ViewRenderer<TView,TNativeView>.SizeThatFits call because Control property is null. See attached project.

// Workaround: within custom renderer class

public override SizeF SizeThatFits(SizeF size) {
    if (Control != null)
        return base.SizeThatFits(size);
    return SizeF.Empty;
Comment 1 Ram Chandra 2014-11-07 12:34:01 UTC
I have checked this issue and with the help of attached sample I am able to reproduce this issue.

When I run the program without overriding the SizeThatFits in custom render class, I observed that XS throws "System.Null exception" in "AppDelegate.cs" at  line no 21 and application is deployed on device but crashes.

I have also observed that when I override the SizeThatFits in custom render class application is deployed successfully on device.

Screencast: http://www.screencast.com/t/OBvTrem7

Build Output: https://gist.github.com/saurabh360/0cf47010e716ad09f1e8
IDE logs: https://gist.github.com/saurabh360/cf7d06618b5d65064790
Device logs:  https://gist.github.com/saurabh360/0d76203aa911fb37a0da

Environment Info:

=== Xamarin Studio ===

Version 5.5.3 (build 6)
Installation UUID: 6ea47b0d-1852-4aaf-808d-373ff0a5002b
	Mono 3.10.0 ((detached/e204655)
	GTK+ 2.24.23 (Raleigh theme)

	Package version: 310000023

=== Apple Developer Tools ===

Xcode 6.0.1 (6528)
Build 6A317

=== Xamarin.Mac ===

Version: (Trial Edition)

=== Xamarin.Android ===

Version: 4.18.0 (Trial Edition)
Android SDK: /Users/jatin66/Desktop/Backup/android-sdk-macosx
	Supported Android versions:
		1.6    (API level 4)
		2.1    (API level 7)
		2.2    (API level 8)
		2.3    (API level 10)
		3.0    (API level 11)
		3.1    (API level 12)
		3.2    (API level 13)
		4.0    (API level 14)
		4.0.3  (API level 15)
		4.1    (API level 16)
		4.2    (API level 17)
		4.3    (API level 18)
		4.4    (API level 19)
		4.4.87 (API level 20)
Java SDK: /usr
java version "1.7.0_65"
Java(TM) SE Runtime Environment (build 1.7.0_65-b17)
Java HotSpot(TM) 64-Bit Server VM (build 24.65-b04, mixed mode)

=== Xamarin.iOS ===

Version: (Trial Edition)
Hash: 80e9ff7
Build date: 2014-10-22 15:09:12-0400

=== Build Information ===

Release ID: 505030006
Git revision: fbe3e9453daf6a3bb9a9709ed22bec35f7c9056b
Build date: 2014-10-23 13:08:38-04
Xamarin addins: e44add2b39de4dd57c0742bb2e620dfad84c64c6

=== Operating System ===

Mac OS X 10.10.0
Darwin Jatin66s-iMac.local 14.0.0 Darwin Kernel Version 14.0.0
    Fri Sep 19 00:26:44 PDT 2014
    root:xnu-2782.1.97~2/RELEASE_X86_64 x86_64
Comment 2 Jason Smith [MSFT] 2015-01-12 17:44:13 UTC
If you don't wish to use the Control property, you must use VisualElementRenderer instead of ViewRenderer. ViewRenderer assumes Control will be assigned on the first Element change event.