tes*_*ing 1 c# xamarin.ios ios autolayout xamarin-studio
我想在调试器中输入以下命令
po [[UIWindow keyWindow] _autolayoutTrace]
Run Code Online (Sandbox Code Playgroud)
我怎么在Xamarin工作室那样做?
编辑:
我看到了这个Objective-C代码
NSLog(@"%@", [[UIWindow keyWindow] _autolayoutTrace]);
Run Code Online (Sandbox Code Playgroud)
// for debugging auto layout.
@interface UIWindow (AutoLayoutDebug)
+(UIWindow *)keyWindow;
-(NSString *)_autolayoutTrace;
@end
Run Code Online (Sandbox Code Playgroud)
我想知道在Xamarin iOS中如何做到这一点?
如果您使用统一API,则miguel.de.icaza发布的解决方案将不再起作用,因为您可以获得
由于其保护级别,"ObjCRuntime.Messaging"无法访问
一个人必须使用P/Invoke:
using System;
using System.Runtime.InteropServices;
using Foundation;
using UIKit;
using ObjCRuntime;
public static class UIViewAutolayoutTraceExtensions
{
[DllImport(Constants.ObjectiveCLibrary, EntryPoint="objc_msgSend")]
private static extern IntPtr IntPtr_objc_msgSend (IntPtr receiver, IntPtr selector);
public static NSString AutoLayoutTrace(){
return (NSString)Runtime.GetNSObject(IntPtr_objc_msgSend(UIApplication.SharedApplication.KeyWindow.Handle, new Selector ("_autolayoutTrace").Handle));
}
public static NSString RecursiveDescription(){
return (NSString)Runtime.GetNSObject(IntPtr_objc_msgSend(UIApplication.SharedApplication.KeyWindow.Handle, new Selector ("recursiveDescription").Handle));
}
}
Run Code Online (Sandbox Code Playgroud)
然后你可以像这样使用它:
Console.WriteLine(UIViewAutolayoutTraceExtensions.RecursiveDescription ());
Run Code Online (Sandbox Code Playgroud)
但有一点需要注意:您只能在加载完所有内容后调用此代码.否则KeyWindow将为null.因此,不可能设置断点然后调用此代码.如果您提供触发操作的按钮或类似按钮,则只能调用此代码.
| 归档时间: |
|
| 查看次数: |
217 次 |
| 最近记录: |