[AC-2023] iOS: Layout horizontal adds space to the top and bottom of inner elements
GitHub Issue | n/a |
---|---|
Type | Bug |
Priority | n/a |
Status | Closed |
Resolution | Fixed |
Resolution Date | 2013-05-29T18:39:07.000+0000 |
Affected Version/s | n/a |
Fix Version/s | n/a |
Components | Alloy, Titanium SDK & CLI |
Labels | triage |
Reporter | Eric Wooley |
Assignee | Mauro Parra-Miranda |
Created | 2013-05-13T02:20:22.000+0000 |
Updated | 2016-03-08T07:40:58.000+0000 |
Description
*Problem description*
I have a view set to layout horizontal, I then add 7 views which are layout vertical and have widths of '33%'. This works great on android but on iphone the spaces spaces between each row huge. Maybe there is something obvious I am missing? It seems like this would be pretty basic.
It was recommended that I make a bug report here [http://developer.appcelerator.com/question/152272/ios--alloy-layout-horizontal-adds-space-to-the-top-and-bottom-of-inner-elements]
Here is a picture of the iOS and Android render. [http://i.imgur.com/6Gx7b1U.png] (also attached)
I have a View set in an alloy xml view
<!-- AddAlarm.xml -->
<Alloy>
<Window class='container' id="win">
<ScrollView>
<Label class='header'>Add New Alarm</Label>
<View id="overview">
<TextField hintText="Alarm Name" borderStyle="Ti.UI.INPUT_BORDERSTYLE_ROUNDED" id="alarm_name" />
<View class='form' id='form'> </View>
<View id="repeat">
</View>
<Button onClick="close" id="create_alarm">Add Alarm</Button>
<Button onClick="close" class='pink' id="cancel_alarm">Cancel</Button>
</View>
</ScrollView>
</Window>
</Alloy>
and here is the relevant part of the tss
// AddAlarm.tss
"#repeat":{
width: Ti.UI.FILL
,height: Ti.UI.SIZE
,left: '10dip'
,right: '10dip'
,layout:'horizontal'
},
This is the function which generates the views with the switches in them (from my utils)
// lib/tools.js
module.exports = (function(){
return {
/**
* Creates a checkbox which can be used on android or anything else.
* @param {Object} specs
* Object which holds the specs to be defined.
*/
createCheckbox: function(specs) {
var is_android = Ti.Platform.osname == 'android';
if(typeof specs != "object")
specs = {};
var checkbox;
checkbox = Ti.UI.createSwitch({
style : is_android?Ti.UI.Android.SWITCH_STYLE_CHECKBOX:null,
value : false,
height : Ti.UI.SIZE,
width : Ti.UI.SIZE
});
var view = Ti.UI.createView({
height: specs.height || Ti.UI.SIZE,
width: specs.width || Ti.UI.SIZE,
layout: specs.layout || 'vertical',
top: specs.top || '0dip',
bottom: specs.bottom || '0dip',
backgroundColor:'red'
});
if(specs.label){
if(typeof specs.label == 'string'){
var lbl = Ti.UI.createLabel({
height: Ti.UI.SIZE,
width: Ti.UI.SIZE,
text: specs.label,
color: 'black',
font: {fontSize: '15dip'}
});
view.add(lbl);
// view.label = lbl;
}
else{
view.add(specs.label);
}
}
view.checked = false;
view.add(checkbox);
function togglecheck () {
if(!view.checked) {
view.checked = true;
}
else {
view.checked = false;
}
};
view.addEventListener('change', togglecheck);
return view;
},
// ....
Here is the adding of the views with the switches in them.
// AddAlarm.js
ch_sun = utils.createCheckbox({label:" Sunday", width:'33%'});
ch_mon = utils.createCheckbox({label:" Monday", width:'33%'});
ch_tue = utils.createCheckbox({label:" Tuesday", width:'33%'});
ch_wed = utils.createCheckbox({label:" Wednesday", width:'33%'});
ch_thu = utils.createCheckbox({label:" Thursday", width:'33%'});
ch_fri = utils.createCheckbox({label:" Friday", width:'33%'});
ch_sat = utils.createCheckbox({label:" Saturday", width:'99%'});
$.repeat.add(ch_sun);
$.repeat.add(ch_mon);
$.repeat.add(ch_tue);
$.repeat.add(ch_wed);
$.repeat.add(ch_thu);
$.repeat.add(ch_fri);
$.repeat.add(ch_sat);
Sorry for any formatting errors, It's my first time submitting something here. I realize it may be hard to read the code on this, so I uploaded the whole project to github [https://github.com/5wooley4/RemindMe-Chain/tree/master/app]
*Workaround*
I discovered a workaround, and part of the cause. The bug was only happening when there was a label added to the view with the switch in it (generated in tools.js). I changed the height of label from Ti.UI.SIZE to '20dip', and it worked normally on ios.
// tools.js
//................
var lbl = Ti.UI.createLabel({
height:'20dip',
width: Ti.UI.SIZE,
text: specs.label,
color: 'black',
font: {fontSize: '15dip'}
});
view.add(lbl);
// ...................
Attachments
File | Date | Size |
---|---|---|
Screen Shot 2013-05-12 at 10.32.49 AM.png | 2013-05-13T02:20:23.000+0000 | 62692 |
Supplied project is using 3.0.0 GA. This bug is fixed in 3.0.2 GA and above. Tested in iOS 6 simulator.