Adding a container view to UISplitviewController - uisplitviewcontroller

I would like to add a container view to my UISplitViewController in such a way that its always in the center of the screen. My problem is that I have a master and detail so the container view can't really belong to either one. Right? I guess the main issue is how to display it when in allVisible mode (when both master and detail are shown).
Is this possible?

After some digging, the answer is YES and was somewhat embedded in the question: add the container view to the UISplitViewController which in and of itself is a containerView.
containerView = UIView()
containerView.backgroundColor = UIColor.green
containerView.alpha = 0.5
containerView.translatesAutoresizingMaskIntoConstraints = false
let spvcView = splitViewController!.view!
spvcView.addSubview(containerView)
NSLayoutConstraint.activate([
containerView.leadingAnchor.constraint(equalTo: spvcView.leadingAnchor, constant: 50),
containerView.trailingAnchor.constraint(equalTo: spvcView.trailingAnchor, constant: -50),
containerView.topAnchor.constraint(equalTo: spvcView.topAnchor, constant: 50),
containerView.bottomAnchor.constraint(equalTo: spvcView.bottomAnchor, constant: -50),
])
That's it!

Related

How to resized button in godot

Why when creating a button with a script in the function _ready, these buttons cannot be resized. (And position)
var pos
var siz
var yBut = 150
var but
func _ready():
siz = get_viewport().get_visible_rect().size
pos = get_viewport().get_visible_rect().position
but = Button.new()
$sc/vb.add_child(but, true)
but.rect_position = pos/2
but.rect_size = Vector2(siz.x, 150)
ps. The buttons are placed in a ScrollContainer in which the vBoxContainer.
Container controls will auto resize and position children controls. Try using the Button's size flags to suggest it's size.
You can also compose ui with multiple levels of other Container controls such as V and HBoxContainer using size flags. This will give you finer control over the whole look of the ui. This will also make it easier to add controls later that will adaptively resize.
You can also set rect_min_size and the Container will not resize it any smaller than min size. However, that may break dynamic layout.
Hope this helps!

UIPopoverController displays at wrong position

I want to show a UIPopoverController when clicking on a label. All elements are laid out with AutoLayout.
// In TorHeimPopoverViewController.swift
// self.view is TorHeimPopoverViewController's view
popover.presentPopoverFromRect(label.frame, inView: self.view, permittedArrowDirections: UIPopoverArrowDirection.Left, animated: true)
It's displayed in another UIPopoverController (TorHeimPopoverViewController) and there in a Container
MainAppView -> TorHeimPopoverViewController -> ContainerView
How can I fix this?
The problem is, the inView parameter is wrong for this purpose. The rect of label.frame is in relation to the ContainerView, in which it is.
For example, when label.frame is x = 300, y = 100, it will take these coordinates, but use self.view as origin and not the container.

iOS 8 Bug with UIImagePickerController Image Crop

I am having an issue with UIImagePickerController with allowsEditing = YES.
I am unable to crop the image from the bottom but also I have an extra empty space on top when moving the crop rectangle.
Also in the method.
-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
I log info and it gives me wrong CropRect (which is not square!)
UIImagePickerControllerCropRect = "NSRect: {{0, 357}, {666, 646}}";
UIImagePickerControllerEditedImage = "<UIImage: 0x7f9b8aa47b30> size {640, 618} orientation 0 scale 1.000000";
UIImagePickerControllerMediaType = "public.image";
UIImagePickerControllerOriginalImage = "<UIImage: 0x7f9b8868e5a0> size {1500, 1001} orientation 0 scale 1.000000";
Does anyone has this bug and how do you fix it?
See the picture below
I have no idea how, but i totally removed "View controller-based status bar appearance" key row (just fully delete this row) in .plist file and it fixed this bug
I couldn't set the "View controller-based status bar appearance" to YES, so I have tried to hide the status bar when I show the UIImagePickerController like so:
let imagePickerController = UIImagePickerController()
...
myViewController.present(imagePickerController, animated: true) {
UIView.animate(withDuration: 0.25, animations: {
UIApplication.shared.isStatusBarHidden = true
})
}
Then on the UIImagePickerControllerDelegate didFinishPickingMediaWithInfo I show the status bar, and it worked.

Canvas' verticalScrollPosition cannot be changed in Flex

I have a weird problem with verticalScrollPosition in Flex.
I have a content Canvas and a wrapper Canvas. The content is large (5000px X 5000px), the wrapper is 800px X 800px.
public var wrapper:Canvas = new Canvas();
public var content:Canvas = new Canvas();
wrapper.addChild(content);
application.addChild(wrapper);
I would like to set the wrapper's scrollbar position dynamically anytime. I can do it by calling its properties:
wrapper.verticalScrollPosition = A;
wrapper.horizontalScrollPosition = B;
This is working fine. But! If I set a default scrollbar position when the Canvas is complete:
wrapper.addEventListener(FlexEvent.CREATION_COMPLETE, function(e:FlexEvent):void{
wrapper.verticalScrollPosition = DEFAULT_A;
wrapper.horizontalScrollPosition = DEFAULT_B;
});
I can't set the verticalScrollPosition anymore:
wrapper.verticalScrollPosition = C;
trace(wrapper.verticalScrollPosition); // Outputs: DEFAULT_A
So the problem only exist if I set a default position using 'FlexEvent.CREATION_COMPLETE'.
What am I doing wrong here?
Thanks in advance.
I've found a horrible workaround - I wait 1 microsecond to set the default state:
wrapper.addEventListener(FlexEvent.CREATION_COMPLETE, function(e:FlexEvent):void{
setTimeout(
function():void{wrapper.verticalScrollPosition = DEFAULT_A;},
1
);
});
I think we can agree it's really ugly. How can I make it better?
I've found the problem. I attached the event listener to the child of the wrapper. When I added the listener to the wrapper itself it works.
So lesson I've learnt: always track the topmost ui element's events you have to work with.

How do I Print a dynamically created Flex component/chart that is not being displayed on the screen?

I have a several chart components that I have created in Flex. Basically I have set up a special UI that allows the user to select which of these charts they want to print. When they press the print button each of the selected charts is created dynamically then added to a container. Then I send this container off to FlexPrintJob.
i.e.
private function prePrint():void
{
var printSelection:Box = new Box();
printSelection.percentHeight = 100;
printSelection.percentWidth = 100;
printSelection.visible = true;
if (this.chkMyChart1.selected)
{
var rptMyChart1:Chart1Panel = new Chart1Panel();
rptMyChart1.percentHeight = 100;
rptMyChart1.percentWidth = 100;
rptMyChart1.visible = true;
printSelection.addChild(rptMyChart1);
}
print(printSelection);
}
private function print(container:Box):void
{
var job:FlexPrintJob;
job = new FlexPrintJob();
if (job.start()) {
job.addObject(container, FlexPrintJobScaleType.MATCH_WIDTH);
job.send();
}
}
This code works fine if the chart is actually displayed somewhere on the page but adding it dynamically as shown above does not. The print dialog will appear but nothing happens when I press OK.
So I really have two questions:
Is it possible to print flex components/charts when they are not visible on the screen?
If so, how do I do it / what am I doing wrong?
UPDATE:
Well, at least one thing wrong is my use of the percentages in the width and height. Using percentages doesn't really make sense when the Box is not contained in another object. Changing the height and width to fixed values actually allows the printing to progress and solves my initial problem.
printSelection.height = 100;
printSelection.width = 100;
But a new problem arises in that instead of seeing my chart, I see a black box instead. I have previously resolved this issue by setting the background colour of the chart to #FFFFFF but this doesn't seem to be working this time.
UPDATE 2:
I have seen some examples on the adobe site that add the container to the application but don't include it in the layout. This looks like the way to go.
i.e.
printSelection.includeInLayout = false;
addChild(printSelection);
Your component has to be on the stage in order to draw its contents, so you should try something like this:
printSelection.visible = false;
application.addChild(printSelection);
printSelection.width = ..;
printSelection.height = ...;
...
then do the printing
i'm not completely sure, but in one of my application I have to print out a complete Tab Navigator and the only method i have found to print it is to automatically scroll the tabnavigator tab in order to show the component on screen when i add them to the printjob.
In this way they are all printed. Before i created the tabnaviagotr scrolling the print (to PDF) result was a file with all the pages of the tab but only the one visible on screen really printed.

Resources